8

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

WTSGetActiveConsoleSessionId->WTSQueryUserToken->CreateProcessAsUser

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

当服务在我的个人帐户下运行时,我应该如何启动 GUI 程序?

4

4 回答 4

2

John 和 jdigital 都是正确的——据我了解,服务通常可以具有桌面访问权限(您必须使用本地系统)或网络访问权限(您需要指定要在其下运行的帐户)。

您将需要两个将您的应用程序一分为二 - 一个用于与桌面交互,另一个用于通过网络交谈。然后,这两个部分可以相互交谈,将信息传递给最终用户。

于 2009-06-04T15:02:02.117 回答
0

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

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

您必须想办法将权限扩展到您的服务,或者通过提示输入凭据,或者连接到作为 LocalSystem 运行的帮助服务。

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

我确信有更彻底的答案来处理这样做的进出,但在高层次上,我认为这就是问题所在。

于 2009-06-04T03:45:33.703 回答
0

您可能在错误的窗口站或桌面上运行。请参阅有关 Window Stations and Desktops 的 Microsoft 参考资料

于 2009-06-04T05:09:13.880 回答
0

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

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

于 2009-06-04T06:33:00.477 回答