我一直在阅读很多关于从Windows服务执行GUI应用程序的内容。当服务以SYSTEM用户身份运行时(我使用的是Windows XP),“允许服务与桌面交互”复选框对我有用。 现在我需要服务作为域(在网络中)中定义的用户运行。一切正常(即使没有用户登录到机器),但未显示GUI(即使登录了相同的网络用户!)。 我知道GUI正在运行,只是它们被隐藏了。这是为什么?有没有办法在用户登录时显示它们(比如由SYSTEM用户创建并允许与桌面交互!)? 如果是这样,如果登录的用户与运行该服务的用户不同,它会起作用吗?
@casperOne:我看到了你的解决方案,而且人们(甚至你)一直在发帖。在我的情况下,我确信我在一个安全的环境中运行,一次只有一个用户将登录到一台机器。简单地取消隐藏GUI是不是可以做任何事情?为什么这适用于用户SYSTEM允许与桌面交互而不与其他用户交互?
答案 0 :(得分:7)
您的方法完全错误,在Vista上部署时无效。
服务不应该假设与桌面进行登录会话以进行交互。
相反,您应该拥有第二个应用程序,该应用程序在用户登录时(或其他某个时间点)运行,并与服务进行通信,然后在接收到来自服务的通知/响应时显示UI元素。
有关详细信息,请参阅此其他问题(和答案):
答案 1 :(得分:0)
简短回答:不,你不能这样做
答案很长:Noooooo。
基本上,微软正在进行更改以进一步防止这种情况发生。正如casperOne所说,您需要将UI组件与服务分开。
答案 2 :(得分:0)
即使在XP上,它也无法在非域名加入的计算机上运行(如果您有多个用户使用快速用户切换,弹出窗口会显示在错误的桌面上或根本没有桌面上。)
至于为什么微软改变了这一点,快速搜索“破碎攻击” - 通过将服务代码与桌面隔离,他们完全切断了整个系列的安全漏洞。