psexec %1 不是有效的 Win32 应用程序
psexec %1 is not a valid Win32 application
这是我用于 运行 远程服务器上的 exe 文件的代码。我在 Web 服务器中使用以下代码部署了控制台应用程序,以调用远程服务器上的 exe。但我收到错误 "psexec %1 is not a valid Win32 application"。我在我的本地机器上测试了这段代码,它工作正常......但它在服务器上不起作用。
ProcessStartInfo info = new ProcessStartInfo("C:\PsTools");
info.FileName = @"C:\PsTools\psexec.exe";
info.Arguments = @"\" + "MyComputerName" + @" -h D:\Idealake\Schedulers\SBIHangFireConsole\bin\Debug\SBIHangFireConsole.exe";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
服务器详细信息 --
内核版本:Windows Server 2012 R2 Standard,多处理器免费
产品类型:标准版
产品版本:6.3
服务包:0
内核内部版本号:9600
注册机构:
注册所有者:Windows 用户
浏览器版本:9.0000
系统根目录:C:\Windows
处理器:4
处理器速度:2.5 GHz
处理器类型:AMD Opteron(tm) 处理器 6380
物理内存:2 MB
显卡驱动:VMware SVGA 3D
此包中的 PsTools 版本:2.45
Install Power Shell in the Remote PC
Enable Power Shell Remoting to execute Powershell Commnads on the remote server by using the command "Enable-PSRemoting"
Add the server from which you are making the call as a Trusted one by using the command-
set-item wsman:\localhost\Client\TrustedHosts -value 172.16.0.0
注意:确保在两台计算机中运行执行上述命令
Now use the below code in your project to execute exe on remote server
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
ps.Commands.AddScript("$User = \"domain\username\"");
ps.Commands.AddScript("$PWord = ConvertTo-SecureString -String \"yourpassword\" -
AsPlainText -Force");
ps.Commands.AddScript("$Credential = New-Object -TypeName
System.Management.Automation.PSCredential -ArgumentList $User, $PWord");
ps.Commands.AddScript("Invoke-Command -ComputerName REMOTECOMPUTERIP -ScriptBlock {
D:\TestApp.exe } -cred $Credential");
Collection<PSObject> resultst = ps.Invoke();
Collection<ErrorRecord> errors = ps.Streams.Error.ReadAll();
StringBuilder errorDetails = new StringBuilder();
if (errors != null && errors.Count > 0)
{
foreach (ErrorRecord er in errors)
{
errorDetails.AppendLine(er.Exception.ToString());
}
throw new Exception(errorDetails.ToString());
}
Console.WriteLine(errorDetails.ToString());
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in resultst)
{
stringBuilder.AppendLine(obj.ToString());
}`enter code here`
Console.WriteLine(stringBuilder.ToString());
runspace.Close();
这是我用于 运行 远程服务器上的 exe 文件的代码。我在 Web 服务器中使用以下代码部署了控制台应用程序,以调用远程服务器上的 exe。但我收到错误 "psexec %1 is not a valid Win32 application"。我在我的本地机器上测试了这段代码,它工作正常......但它在服务器上不起作用。
ProcessStartInfo info = new ProcessStartInfo("C:\PsTools");
info.FileName = @"C:\PsTools\psexec.exe";
info.Arguments = @"\" + "MyComputerName" + @" -h D:\Idealake\Schedulers\SBIHangFireConsole\bin\Debug\SBIHangFireConsole.exe";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
服务器详细信息 --
内核版本:Windows Server 2012 R2 Standard,多处理器免费 产品类型:标准版 产品版本:6.3 服务包:0 内核内部版本号:9600 注册机构: 注册所有者:Windows 用户 浏览器版本:9.0000 系统根目录:C:\Windows 处理器:4 处理器速度:2.5 GHz 处理器类型:AMD Opteron(tm) 处理器 6380 物理内存:2 MB 显卡驱动:VMware SVGA 3D
此包中的 PsTools 版本:2.45
Install Power Shell in the Remote PC
Enable Power Shell Remoting to execute Powershell Commnads on the remote server by using the command "Enable-PSRemoting"
Add the server from which you are making the call as a Trusted one by using the command-
set-item wsman:\localhost\Client\TrustedHosts -value 172.16.0.0
注意:确保在两台计算机中运行执行上述命令
Now use the below code in your project to execute exe on remote server
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
ps.Commands.AddScript("$User = \"domain\username\"");
ps.Commands.AddScript("$PWord = ConvertTo-SecureString -String \"yourpassword\" -
AsPlainText -Force");
ps.Commands.AddScript("$Credential = New-Object -TypeName
System.Management.Automation.PSCredential -ArgumentList $User, $PWord");
ps.Commands.AddScript("Invoke-Command -ComputerName REMOTECOMPUTERIP -ScriptBlock {
D:\TestApp.exe } -cred $Credential");
Collection<PSObject> resultst = ps.Invoke();
Collection<ErrorRecord> errors = ps.Streams.Error.ReadAll();
StringBuilder errorDetails = new StringBuilder();
if (errors != null && errors.Count > 0)
{
foreach (ErrorRecord er in errors)
{
errorDetails.AppendLine(er.Exception.ToString());
}
throw new Exception(errorDetails.ToString());
}
Console.WriteLine(errorDetails.ToString());
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in resultst)
{
stringBuilder.AppendLine(obj.ToString());
}`enter code here`
Console.WriteLine(stringBuilder.ToString());
runspace.Close();