C# PSEXEC通过命令提示符成功运行,但在ASP.Net/C中失败#

C# PSEXEC通过命令提示符成功运行,但在ASP.Net/C中失败#,c#,asp.net,psexec,C#,Asp.net,Psexec,我正在尝试使用PSEXEC工具在远程计算机上运行命令,它使用命令提示符成功运行,但在asp.net项目中失败,显示以下输出错误 PsExec v2.11-远程执行过程版权所有(C)2001-2014标记 Russinovich Sysinternals-www.Sysinternals.com 句柄无效 正在连接到lnxdevx 正在lnxdevx上启动PSEXESSVC服务 正在连接lnxdevx上的PsExec服务 派生会话密钥时出错: 这是我的c#代码示例 问题是,您不必打开psexec,

我正在尝试使用PSEXEC工具在远程计算机上运行命令,它使用命令提示符成功运行,但在asp.net项目中失败,显示以下输出错误

PsExec v2.11-远程执行过程版权所有(C)2001-2014标记 Russinovich Sysinternals-www.Sysinternals.com

句柄无效

正在连接到lnxdevx

正在lnxdevx上启动PSEXESSVC服务

正在连接lnxdevx上的PsExec服务

派生会话密钥时出错:

这是我的c#代码示例


问题是,您不必打开
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)

转到应用程序池->
高级设置
->部分
“流程模型”
->
“加载用户配置文件”

默认值为
false
。当您将其更改为
true
时,一切都应该正常工作

更多一些(更多的解释,需要进一步的研究)

  • psexec和Sysinternal的所有工具要求接受EULA。这可以通过使用
    -accepteula
    调用它们来解决,请参见
  • 这应该保存在注册表中。你必须有一个个人资料才能阅读

基于

您是否尝试将UseShellExecute更改为true?(这似乎是默认的)谢谢你,路易斯,你救了我一天。
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();