当我运行一个服务作为本地系统帐户,我可以使用以下代码下当前的登录帐户启动一个GUI程序:

WTSGetActiveConsoleSessionId-> WTSQueryUserToken-> CreateProcessAsUser

然而,当我运行该服务为我的个人账户,GUI程序将不会出现。我可以看到它在虽然任务管理器。

我应该怎么做才能启动GUI程序时的服务是在我的个人帐户下运行?

有帮助吗?

解决方案

约翰和jdigital都是对的 - 从我的理解,服务一般要么桌面访问(你必须使用本地系统)或网络接入(你需要指定一个账户下运行)

您需要分成两部分,你的应用程序分为二 - 一个与桌面和其他互动交谈在网络上。然后,两个部分可以互相交谈来中继信息给终端用户。

其他提示

这一切都与权限,我相信这样做。

本地系统有足够的权限来模拟当前用户,但您的帐户没有。

您不得不,或者通过提示输入凭据,或连接到运行作为LocalSystem的辅助服务,想出一个办法来扩展权限为你服务。

(你为什么想与您的帐户,而不是本地系统上运行?)

我敢肯定有更透彻的答案,与在的和这样做的出来的问题,但在较高的水平,我认为这是问题。

您可能在错误的窗口站或桌面上运行。看到这个在窗口站和台式机微软参考

我相信,你正在尝试做的,可以视为一个安全漏洞。它也不太可能在某些情况下正常工作。我认为jdigital是它有做窗口站和试图访问当前用户窗口站正确的,它的桌面。当你在那里有多个当前窗口站终端服务服务器下这是混淆了很多。微软真的不想你,你想要什么,他们每个Windows版本使它更难。

我认为最好的方法是从另一个角度解决问题,只是创建一个用户运行(在登录manaully或自动),它可与您的服务GUI应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top