2011-09-13 38 views
0

使用.NET时,我需要在我的域内的远程PC上执行一个进程(控制台应用程序)。该流程需要以交互方式打开(可以从远程桌面看到)并作为指定的域帐户执行。以域名/用户互动的方式执行远程过程

我的.NET应用程序作为Windows服务运行,其执行帐户在两个框上都有管理员。我需要打开该进程的用户帐户与服务不同,但在远程客户端(不幸的是,Windows Server 2000)上也有管理员帐户。

+0

是其他PC​​上运行你的服务?如果没有,您需要查看远程WMI。 –

+0

不,该服务在独立的服务器上运行,而不是与要在其中交互式启动过程的服务器。 –

+0

然后,关于CreateProcessAsUser的所有常见内容都不适用,因为您没有任何代码在那里运行。你需要使用WMI。 –

回答

0

我将继续前进,并将其视为不可能;我将尝试更改我的需求,以便我的服务将以我需要执行该进程或在本地运行服务/脚本所需的相同用户身份运行。

感谢您的答复, 扎克斯金纳

1

看到这个:How to execute program on remote computer?

它使用Win32_ScheduledJob WMI类来执行,可以在远程计算机的交互式桌面上看到一个过程。

+0

感谢您的链接;这可能是我正在寻找的。不幸的是,我很难找到一种方法来查询远程服务器的时间,所以我可以尽快安排。 'Win32_LocalTime'不适用于Win Server 2000. –

+1

一旦您测试了它,我相信只有当目标用户登录后,您才会发现它是交互式的。 – Joshua

+0

问题不明确:登录用户(如果有)是用户作为谁来运行该进程?如果它们是相同的,这将起作用。如果没有(如你所说)不会。 –

0

没有支持创建令牌的方式,该令牌将用作特定用户并显示在特定桌面上。

如果你不需要访问任何网络资源,NtCreateToken可以构造一个任意的令牌。要找到随机SID,您需要结合登录SID,窃取该会话的winlogon令牌。

如果您可以作为SYSTEM使用,请窃取winlogon令牌并直接使用它。编辑:因为这是一个控制台应用程序,你可以安排做类似于打开类似telnet的进程(窃取winlogon令牌)并通过套接字或命名管道将其连接到你的工作者(无窗口)。