Answers:
主要是安全原因。
据我了解,当Windows服务创建GUI控件(如MessageBox)时,通常只能在该服务运行的会话中看到它们,即会话0,该会话过去也曾经是本地登录的第一个用户或使用mstsc / admin。因此,该用户将看到这些控件并可以与服务进行交互。
但是出于安全原因,现在保留了会话0,并且将为第一个登录用户提供新的会话,因此看不到GUI控件。
由于这破坏了很多服务,因此为了兼容性,有一个过程(请参阅此MSDN博客)尝试检测是否正在显示任何消息,并弹出带有警告的窗口“此计算机上正在运行的程序正在尝试显示消息”。 ',并允许您查看或忽略该消息。
Microsoft有与此主题有关的白皮书,您可以从此处下载
我还怀疑另一个次要原因是因为该功能被滥用/误解并导致了不良设计。例如,我曾经有一台带有第三方服务的旧服务器,该服务器使用消息框显示某些通知/错误,而不是写入事件日志。但是我从来没有在本地登录,也很少以管理员模式登录,因此我看不到消息。
交互式服务曾经是可能的,但是服务模型是独立于任何用户运行的流程的模型。它们设计为无人值守运行,因此不需要GUI。
自Windows Vista以来,交互式服务一直不可用,因此不应再使用。
如果您需要与服务交互,则我链接到的页面建议创建一个单独的GUI应用程序,该应用程序通过某种类型的进程间通信(IPC)与服务进行通信,例如命名管道。
因为服务应该在后台运行而不与用户交互;实际上,它们可以在没有用户登录的情况下运行。
是的,这是有可能的,并且有效。登录后,您将看到应用程序的界面。对于没有可用服务但仍需要在服务器上运行的较旧应用程序,它非常有用。虽然这不是最稳定的解决方案。它以用户身份运行,可以单击它或将其注销。那不是很好。
现在,每个人都开发本机服务并添加应用程序或日志来管理服务。这是一个很好的设计模式,现在大多数时候都在使用。
因此,将其更多地视为可能的遗产。