如何在Windows服务中启动GUI程序?

时间:2009-06-04 03:15:49

标签: windows-services createprocess

当我以LocalSystem帐户运行服务时,我可以使用以下代码在当前登录帐户下启动GUI程序:

WTSGetActiveConsoleSessionId-> WTSQueryUserToken-> CreateProcessAsUser

但是,当我将该服务作为我的个人帐户运行时,GUI程序将不会显示。我可以在任务管理器中看到它。

如果服务在我的个人帐户下运行,我该怎么办才能启动GUI程序?

4 个答案:

答案 0 :(得分:2)

John和jdigital都是对的 - 根据我的理解,服务通常可以是桌面访问(您必须使用本地系统)或网络访问(您需要指定要在其下运行的帐户)。

您需要将两个应用分成两个 - 一个用于与桌面交互,另一个用于通过网络进行通信。然后,这两个部分可以相互通信以将信息转发给最终用户。

答案 1 :(得分:0)

这一切都与我相信的权限有关。

LocalSystem具有足够的权限来模拟当前用户,但您的帐户却没有。

您必须找到一种方法来扩展服务权限,方法是提示输入凭据,或者连接到以LocalSystem身份运行的帮助程序服务。

(为什么要使用您的帐户而不是LocalSystem运行?)

我确信有更多彻底的答案可以解决这个问题,但在很高的层面上我认为这是问题。

答案 2 :(得分:0)

您可能在错误的窗口站或桌面上运行。请参阅此Microsoft reference on Window Stations and Desktops

答案 3 :(得分:0)

我相信您尝试做的事情可能会被视为安全漏洞。在某些情况下也不太可能有效。我认为jdigital是正确的,因为它与窗口站有关,并试图访问当前用户窗口站和它的桌面。当你在一个有多个当前窗口站的终端服务服务器下时,这很困惑。微软真的不希望你得到你想要的东西,而且每次发布windows都会让它变得更难。

我认为最好的办法是从另一个角度解决问题,只需创建一个用户运行的GUI应用程序(在登录时手动或自动运行),然后与您的服务进行对话。