我有一个服务器应用程序Server.exe
,它侦听TCP端口并回复连接到它的客户端。目前,它是一个Windows窗体应用程序,其GUI设置用于调试(显示已连接的人和其他一些消息)。
我想创建一个启动此Server.exe
的Windows服务,并确保Server.exe
始终在运行(如果因任何原因崩溃,则重新启动它)。该服务将通过创建新的Process
(Server.exe
)来启动服务器。当没有用户登录时,可以运行(通常是)服务。由于Server.exe
确实有一些GUI,这会在没有用户登录的情况下产生任何问题吗?
(我不在乎GUI不可见,我只是想确保GUI不会阻止应用程序在GUI不可用/可见的情况下正常工作(即没有用户已登录))。
注意: 该应用程序不依赖于任何特定的用户输入,它还有一些长时间运行的后台线程(也不依赖于用户输入)。
答案 0 :(得分:1)
如果您的Windows服务本身可以完成所有工作,例如端口侦听和响应,则可能会更好,而不是让您的设计受信息/调试要求的驱动。然后有一个单独的Windows窗体应用程序只是为了调试。此应用程序可以将信息请求发送到不同端口上的Windows服务,并显示结果。
如果你必须坚持当前的方法,那你就有问题了。默认情况下,gui进程将在会话0中启动.GUI将显示正常,但没有人会看到它。在Vista及更高版本中,没有交互式用户会话可以访问会话0。
您可以使用CreateProcessAsUser API函数在特定用户的桌面上创建流程。但这只有在特定用户登录时才有效。并注意该链接中有关用户交互的警告。
答案 1 :(得分:0)
以前可以创建Interactive Service for Windows, however it is strongly discouraged by Microsoft。服务属性对话框的LogOn选项卡上有一个复选框。
创建交互式服务的主要问题是可以锁定服务,等待永远不会发生的用户输入。
但是如果你想要坚持这条路线,那么this可能是一个很好的起点。