psexec.exe没有';当我从C#创建一个进程时,它不起作用
本文关键字:一个 进程 不起作用 创建 没有 exe psexec | 更新日期: 2023-09-27 18:13:53
长话短说。。。
这不起作用:
Process p = new Process();
p.StartInfo.FileName = @"External'PsExec.exe";
string file = String.Concat(Path.Combine(Environment.CurrentDirectory,"temp"),@"'iisreset",DateTime.Now.ToString("ddMMyyyy-hhmmssss"),".txt");
p.StartInfo.Arguments = String.Format("-s -u {0}''{1} -p {2} ''''{3} iisreset > '"{4}'"", Domain,UserName, Password, machineIP, file);
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
我收到一条RPC不可用的消息。
但是,当我访问程序文件夹中的命令行时,我会运行以下命令:(使用正确的参数(,就像我在filename/arguments中指定的一样。。。
External'PsExec.exe -s -u [user] -p [password] ''[ip] iisreset > "[path]"
它有效!我必须在C#进程中指定其他内容吗?可能会发生什么?
提前感谢!
EDIT:如果我将cmd
作为FileName,并将/c PsExec.exe
放在参数之前,它就会起作用。问题是这样它总是显示窗口。
不使用p.startinfo.arguments而使用p.standardput.writeline(命令(
string PSPath = @"C:'PSTools'PsExec.exe";
fullcommand = PSPath + " -u " + userName + " -p " + password + " ''''" + remoteMachine + " -h cmd.exe /c " + command + "";
Console.Clear();
//Console.WriteLine(fullcommand);
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.FileName = "cmd.exe";
//process.StartInfo.Arguments = fullcommand;
process.Start();
process.StandardInput.WriteLine(fullcommand);
process.StandardInput.Flush();
process.StandardInput.Close();
Console.WriteLine("*****Command*****");
Console.WriteLine(fullcommand);
Console.WriteLine("*****Output*****");
Console.WriteLine(process.StandardOutput.ReadToEnd());
Console.WriteLine("*****Error*****");
Console.WriteLine(process.StandardError.ReadToEnd());
Console.WriteLine("*****Exit*****");
process.WaitForExit();
Console.WriteLine("Again ?");
您不能像现在这样使用参数重定向标准输出。事情并非如此。
在命令行,当命令解释器看到>时,参数结束,并开始将标准输出重定向到文件名的过程。
要在C#中实现这一点,您需要使用StartInfo
类的RedirectStandardOutput
属性,然后从Process.StandardOutput
流中读取并写入文件。
RedirectStandardOutput的MSDN文档中有一个可以用来入门的简短示例。
iisreset [machinename] -
您不需要psexec