在远程计算机上执行exe

时间:2014-09-11 08:06:58

标签: c# remote-server psexec

我正在尝试在远程计算机上执行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();
    }

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

4 个答案:

答案 0 :(得分:6)

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

        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);

答案 1 :(得分:3)

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

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

psexec \\serverName "notepad.exe"

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

psexec \\serverName "notepad.exe" -i

答案 2 :(得分:2)

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

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

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

尝试打印出来。请参阅有关UNC on MSDN的文档,以及一些示例here(或关于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)。

答案 3 :(得分:0)

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

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

您可以查看:Remote UAC LocalAccountTokenFilterPolicy