我正在尝试找到一种在远程计算机上启动程序的方法(在域环境中,所以我知道所有凭据),而不使用任何第三方软件,如PSExec。
现在的问题是,它应该以交互方式运行! (在最好的情况下,它应该在当前登录的用户上下文中运行)我知道WMI,我知道你可以用WMI启动一个进程,但它不是交互式的。 (您可以使用计划任务启动交互式进程,但然后它作为系统进程运行并具有系统权限(?))
现在假设我想为IT技术人员编写一个C#应用程序来监督系统,您是否知道可以使用哪种技术让IT技术人员无需安装软件即可远程启动程序?
或者,换句话说,还有除WMI调度过程之外的其他内容吗?
答案 0 :(得分:1)
如果这是一个适合您的解决方案,您可以自己编写PSExec的功能。如果我记得PSExec的工作原理,首先要使用管理员共享复制文件以在远程系统上运行(例如,\\ PCNAME \ ADMIN $ \ TEMP;如果需要,您可以使用右侧连接到远程计算机使用WNetAddConnection2()
函数的凭据)。如果您在远程计算机上复制的文件可以作为系统服务运行(可能是这种情况,如果您编写一个),则可以使用OpenSCManager()
,CreateService()
和StartService()
来运行启动它。服务可以以交互模式运行(请参阅SERVICE_INTERACTIVE_PROCESS
标志,该标志要求服务作为系统帐户运行)。然后,该服务可以模拟登录用户,可能是使用ImpersonateLoggedOnUser()
使用从OpenProcessToken()
正在运行的进程中获取的令牌,但我从未尝试过查看是否有效。