PSEXEC 通过命令提示符成功运行,但在 ASP 中失败。Net/C#
PSEXEC runs successfully via command prompt but fails in ASP .Net/C#
我正在尝试 运行 使用 PSEXEC 工具在远程计算机上执行命令,它 运行 使用命令提示符成功但在 asp.net 项目中失败,显示以下输出错误。
PsExec v2.11 - Execute processes remotely Copyright (C) 2001-2014 Mark
Russinovich Sysinternals - www.sysinternals.com
The handle is invalid.
Connecting to lnxdevx...
Starting PSEXESVC service on lnxdevx...
Connecting with PsExec service on lnxdevx...
Error deriving session key:.
这是我的示例 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();
问题是您不必打开 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();
我没有在测试,但我很确定这会起作用:)
虽然接受的答案是解决问题,但还有更好的解决方案(至少不涉及cmd)。
转到应用程序池 -> Advanced Settings
-> 部分 "Process Model"
-> "Load User Profile"
.
默认为false
。当您将其更改为 true
时,一切都应该有效。
更多的东西(更多的解释,需要进一步研究)。
- psexec 和 SysInternals 的所有工具都需要接受 EULA。这可以通过使用
-accepteula
调用它们来解决,参见 psexec at ss64
- 这应该保存在注册表中。您必须有个人资料才能阅读。
基于https://nigglingaspirations.blogspot.com/2015/04/psexec-error-deriving-session-key.html
我正在尝试 运行 使用 PSEXEC 工具在远程计算机上执行命令,它 运行 使用命令提示符成功但在 asp.net 项目中失败,显示以下输出错误。
PsExec v2.11 - Execute processes remotely Copyright (C) 2001-2014 Mark Russinovich Sysinternals - www.sysinternals.com
The handle is invalid.
Connecting to lnxdevx...
Starting PSEXESVC service on lnxdevx...
Connecting with PsExec service on lnxdevx...
Error deriving session key:.
这是我的示例 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();
问题是您不必打开 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();
我没有在测试,但我很确定这会起作用:)
虽然接受的答案是解决问题,但还有更好的解决方案(至少不涉及cmd)。
转到应用程序池 -> Advanced Settings
-> 部分 "Process Model"
-> "Load User Profile"
.
默认为false
。当您将其更改为 true
时,一切都应该有效。
更多的东西(更多的解释,需要进一步研究)。
- psexec 和 SysInternals 的所有工具都需要接受 EULA。这可以通过使用
-accepteula
调用它们来解决,参见 psexec at ss64 - 这应该保存在注册表中。您必须有个人资料才能阅读。
基于https://nigglingaspirations.blogspot.com/2015/04/psexec-error-deriving-session-key.html