在远程计算机上执行exe

我正在尝试在远程计算机上执行notepad.exe,但它现在不能正常工作。 我错过了什么?

var ui = new ImpersonateUser(); //the process to restart const string processName = "notepad.exe"; var serverName = "serverName"; try { //Use adbadmin for access ui.Impersonate(_domain, _userName, _pass); //Start the process ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools"); info.FileName = @"C:\PsTools\psexec.exe"; info.Arguments = @"""\\" + serverName + @"C:\WINDOWS\notepad.exe"""; info.RedirectStandardOutput = true; info.UseShellExecute = false; Process p = Process.Start(info); lblStatusResponse.Text = "Service " + processName + " was restarted correctly."; } catch (Exception ex) { lblStatusResponse.Text = ex.ToString(); } finally { ui.Undo(); } 

这让我也不例外,但我肯定错过了一些东西……

答案是你的回复的组合。 但整个正确的解决方案是:

  ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools"); info.FileName = @"C:\PsTools\psexec.exe"; info.Arguments = @"\\" + serverName + @" -i C:\WINDOWS\notepad.exe"; info.RedirectStandardOutput = true; info.UseShellExecute = false; Process p = Process.Start(info); 

运行诸如notepad.exe之类的交互式程序并不总是在目标PC上打开可见窗口。 在运行代码时尝试在目标PC上打开任务管理器,并查看notepad.exe是否出现在正在运行的进程列表中。

我建议先尝试从命令行运行psexec,然后再尝试通过代码调用它。

 psexec \\serverName "notepad.exe" 

您可能还希望使用“交互”标志,以便它可以与目标上的桌面进行交互。

 psexec \\serverName "notepad.exe" -i 

你的UNC路径看起来不太好。

字符串连接后,它看起来像

  "\\serverNameC:\WINDOWS\notepad.exe" 

尝试打印出来。 请参阅MSDN上有关UNC的文档,以及此处的一些示例(或关于UNC路径的Google)

如果您只有默认共享,它应该是类似的

  "\\serverName\C$\WINDOWS\notepad.exe" 

或者psexec让你使用不同的符号,但你必须小心那里的双引号

  psexec \\serverName"c:\WINDOWS\notepad.exe" 

此外,请确保“Server”服务正在目标计算机上运行。

PsExec在远程系统上启动可执行文件,并控制可执行文件进程的输入和输出流,以便您可以与本地系统中的可执行文件进行交互。 PsExec通过从其可执行映像中提取名为Psexesvc的嵌入式Windows服务并将其复制到远程系统的Admin $共享来实现此目的。 然后,PsExec使用具有远程接口的Windows服务控制管理器API来启动远程系统上的Psexesvc服务。

Admin $共享由“服务器”服务创建和管理,因此您需要运行psexec才能运行( http://windowsitpro.com/systems-management/psexec )。

只是为了扩展当前版本的答案。 由于OS策略可能存在执行psexec的问题,要启用远程控制,您需要修改注册表:

 reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f 

您可以检查: 远程UAC LocalAccountTokenFilterPolicy