我正在尝试在C#中通过Process执行命令,但问题是该命令提出一个问题(y / n)并将进程挂在那里。您介意向我推荐解决方案吗?
public static OutputEventArgs execSync(string exe, string arguments)
{
OutputEventArgs oea = new OutputEventArgs();
try
{
using (Process myProcess = new Process())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.FileName = exe;
startInfo.Arguments = arguments;
myProcess.StartInfo = startInfo;
myProcess.Start();
oea.Data = myProcess.StandardOutput.ReadToEnd();
myProcess.WaitForExit();
oea.exitCode = myProcess.ExitCode;
}
}catch(Exception e)
{
oea.Data = e.Message;
oea.ExceptionHappened();
}
return oea;
}
我的命令输出如下:
C:\ Users \ abc> pcli标签-prI:\ PVCS \ DEVELOPMENT \ -idabcd:abcpass -v'test3'-f -z'/Project1/APPLICATION/ajax_fetchGetCustNew.php'未知os = Windows NT(未知)Serena PVCS版本管理器(PCLI)v8.4.0.0(内部版本668) 用于Windows NT / 80x86版权所有1985-2010 Serena软件。保留所有权利 保留。版本“ test3”已在存档中定义 “ I:\ PVCS \ DEVELOPMENT \ archives \ Project1 \ Application \ ajax_fetchGetCustNew.php-arc”。 覆盖? (是/否)
答案 0 :(得分:1)
using(var myProcess = new Process()) {
...
myProcess.Start();
myProcess.StandardInput.WriteLine("y"); // Write 'y' to the processes' console input
...
}
注意:这种方法不是很可重用。
如果存在,最好使用/no-confirm
这样的命令行选项(如John Wu在问题注释中建议的那样)。