我正在尝试在远程计算机上执行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();
}
这让我也不例外,但我肯定错过了一些东西......
答案 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