我尝试使用PSEXEC工具在远程计算机上运行命令,它使用命令提示符成功运行但在asp.net项目中失败,显示以下输出错误。
PsExec v2.11 - 远程执行进程版权所有(C)2001-2014 Mark Russinovich Sysinternals - www.sysinternals.com
句柄无效。
连接到lnxdevx ...
在lnxdevx上启动PSEXESVC服务......
在lnxdevx上与PsExec服务连接...
导出会话密钥时出错:。
这是我的示例c#代码。
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:\Windows\System32\PsExec.exe";
p.StartInfo.Arguments = "-u xxxxxx -p xxxxxxxxxx \\\\lnxdevx -i -d -w \"C:\\DIRECTORY\" cmd.exe /C dir";
p.Start();
string output = p.StandardOutput.ReadToEnd();
string errormessage = p.StandardError.ReadToEnd();
p.WaitForExit();
答案 0 :(得分:1)
问题是您不必打开psexec
,而是cmd
,然后从那里开始运行psexec。
您尝试执行的代码也是错误的,您需要使用
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe"; \\if it is in System32
startInfo.Arguments = "psexec -u xxxxxx -p xxxxxxxxxx \\machine *your stuff*";
process.StartInfo = startInfo;
process.Start();
我没有测试,但我确信这会起作用:)
答案 1 :(得分:0)
虽然接受的答案是解决问题,但有更好的解决方案(至少不涉及 cmd)。
转到应用程序池 -> Advanced Settings
-> 部分 "Process Model"
-> "Load User Profile"
。
默认值为 false
。当您将其更改为 true
时,一切正常。
更多的东西(更多的解释,需要进一步的研究)。
-accepteula
调用它们来解决,参见 psexec at ss64基于https://nigglingaspirations.blogspot.com/2015/04/psexec-error-deriving-session-key.html