长话短说......
这不起作用:
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 Unavailable消息。
但是当我访问程序文件夹中的命令行时,我运行:(使用正确的参数),就像我在文件名/参数中指定的那样......
External\PsExec.exe -s -u [user] -p [password] \\[ip] iisreset > "[path]"
有效! 我是否必须在C#进程中指定其他内容?可能会发生什么?
提前致谢!
编辑:如果我将cmd
作为FileName而/c PsExec.exe
放在参数之前,它就有效。问题是这样它总是显示窗口。
答案 0 :(得分:2)
使用p.standardinput.writeline(command)代替p.startinfo.arguments
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 ?");
答案 1 :(得分:1)
您不能使用您正在进行的参数重定向标准输出。事实并非如此。
在命令行中,当命令解释器看到>时,您的参数结束,并且它开始将标准输出重定向到文件名的过程。
要在C#中完成此操作,您需要使用RedirectStandardOutput
类的StartInfo
属性,然后从Process.StandardOutput
流中读取并写入文件。
RedirectStandardOutput的MSDN文档有一个简短的示例,您可以使用它来开始。
答案 2 :(得分:0)
iisreset [machinename] -
你不需要psexec