在没有任何第三方软件的情况下在远程计算机上启动程序

问题描述:

我试图找到一种方法来启动远程计算机上的程序(在域环境中,所以我知道所有凭据),而没有任何第三方软件PSEXEC。在没有任何第三方软件的情况下在远程计算机上启动程序

现在的问题是,它应该交互式运行! (在最好的情况下,它应该在当前登录的用户上下文中运行)我知道WMI,并且我知道您可以使用WMI启动一个进程,但它不是交互式的。 (您可以启动一个具有计划任务的交互式进程,但它随后会作为系统进程运行并具有系统权限(?))

现在让我们说我想为IT技术人员编写一个C#应用程序来监督系统,你是否知道哪种技术可以用来让IT技术人员无需安装软件即可远程启动程序?

或换句话说,除了WMI预定的过程之外还有别的东西吗?

如果这是您的解决方案,您或许可以自己编写PSExec的功能。如果我记得PSExec的工作原理,它首先复制文件以使用管理共享在远程系统上运行(例如,\\ PCNAME \ ADMIN $ \ TEMP;如有必要,您可以使用右侧连接到远程计算机凭证使用WNetAddConnection2()函数)。如果您在远程机器上复制的文件可以作为系统服务运行(可能是这种情况,如果您编写的话),则可以使用OpenSCManager(),CreateService()StartService()启动它。服务可以以交互模式运行(请参阅SERVICE_INTERACTIVE_PROCESS标志,该标志要求服务以系统帐户运行)。该服务可以模拟登录用户,也许通过使用ImpersonateLoggedOnUser()使用从他的一个正在运行的进程中获得的令牌OpenProcessToken(),但我从来没有试过看是否可行。

+0

非常感谢这个输入:) 你真的认为PSExec将文件复制到远程主机? – Bador 2013-03-25 16:31:22

+0

是的,如果您指定-c选项(请参阅psexec的帮助文本),它会将文件复制到远程主机。如果没有,“应用程序必须位于远程系统的系统路径中”。 – Ale 2013-03-25 16:44:46