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放在参数之前,它就会起作用。问题是这样它总是显示窗口。

psexec.exe没有';当我从C#创建一个进程时,它不起作用

不使用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