C# 正在尝试在会话0中显示GUI

C# 正在尝试在会话0中显示GUI,c#,windows,C#,Windows,我到处都找遍了,几乎什么都试过了,我开始觉得这是不可能的。 我有一个服务作为系统在会话0(win7)中运行。我需要启动一个外部应用程序。如果我只是将外部应用程序作为系统启动,应用程序将启动,并且我可以看到GUI(如果我使用UI0Detect单击会话0)。除了我能够看到它之外,我启动应用程序的服务实际上还可以拍摄GUI的屏幕截图,并将其发送回我的服务器。-在这一点上,一切都是好的 问题-在某些情况下,不允许在系统上下文下运行外部应用程序。在这些情况下,我必须以不同的用户身份启动。我在会话0中以实际

我到处都找遍了,几乎什么都试过了,我开始觉得这是不可能的。 我有一个服务作为系统在会话0(win7)中运行。我需要启动一个外部应用程序。如果我只是将外部应用程序作为系统启动,应用程序将启动,并且我可以看到GUI(如果我使用UI0Detect单击会话0)。除了我能够看到它之外,我启动应用程序的服务实际上还可以拍摄GUI的屏幕截图,并将其发送回我的服务器。-在这一点上,一切都是好的

问题-在某些情况下,不允许在系统上下文下运行外部应用程序。在这些情况下,我必须以不同的用户身份启动。我在会话0中以实际用户身份运行另一个服务。然后,我作为另一个用户启动外部应用程序。外部应用程序在会话0中启动,我指定WinSta0\Default以确保应用程序GUI在我的系统服务可以看到的同一桌面上启动。当这种情况发生时,UI0Detect弹出,给我的印象是,我将单击并查看我的窗口。当我进入会话0或当我的服务尝试屏幕截图时,只有一个小黑匣子。这几乎就像只有系统帐户才能在会话0中呈现窗口-这是真的吗?有人知道会话0中运行的用户帐户是否能够呈现GUI吗

我不是在寻找如何将应用程序从会话0启动到活动用户桌面的代码。这是有据可查的。我需要知道的是如何把反面(有点)。我需要从系统以外的帐户在会话0中启动GUI。

发件人:“如果服务类型指定服务交互进程,则服务必须在LocalSystem帐户中运行。”

因此,没有支持的方法来完成您尝试执行的操作。但是,通过让作为系统运行的服务更改所讨论的桌面(可能还有窗口站)上的权限,可以让它工作。请记住,以这种方式共享桌面意味着,如果有问题的应用程序或用户帐户被破坏,它可能会破坏系统帐户


或者,您可以尝试在会话0中创建一个新桌面(具有适当的权限)并在那里启动应用程序。我不确定交互用户是否能够看到此桌面,但您可以通过在同一桌面上(最好是在同一用户上下文中)启动另一个应用程序来拍摄屏幕截图,以代表您拍摄屏幕截图。

为什么要这样做?服务可以在没有可视桌面的情况下运行——在这种情况下,任何可视桌面都不会出现,用户也无法与UI交互。在这种情况下你会怎么做?我很确定我会得到这个答案。至少现在我可以不再疑惑了。对我来说,在Windows编程方面有着非常酷的学习经历。