在C#中使用带有命令行的cmd运行应用程序

时间:2018-11-07 04:46:38

标签: c# winmerge

我正在一个需要cmd的项目上运行该应用程序。

自动填充应用程序的文本框。

目前,我已经看到了这段代码,但这是行不通的。

它抛出此异常-StandardIn has not been redirected

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Windows\System32\cmd.exe";                  
process.StartInfo = startInfo;
process.StandardInput.WriteLine(@"C:\Program Files\WinMerge\WinMergeU.exe" + txtJOB.Text + txtKJOB.Text + "- minimize - noninteractive - noprefs - cfg Settings / DirViewExpandSubdirs = 1 - cfg ReportFiles / ReportType = 2 - cfg ReportFiles / IncludeFileCmpReport = 1 - r - u -or" + txtResultPath.Text);
process.Start();

如果我使用cmd并运行此行

"C:\Program Files\WinMerge\WinMergeU.exe" + txtJOB.Text + txtKJOB.Text + "- minimize - noninteractive - noprefs - cfg Settings / DirViewExpandSubdirs = 1 - cfg ReportFiles / ReportType = 2 - cfg ReportFiles / IncludeFileCmpReport = 1 - r - u -or" + txtResultPath.Text

这确实有效。但是我将如何在c#中实现此命令行?

有人可以帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

抛出异常是因为您在实际开始流程(process.StandardInput.WriteLine()之前编写了标准的流程(process.Start())输入命令。

如果您只需要启动WinMergeU-根本不需要调用cmd.exe,可以这样进行:

var fileName = @"C:\Program Files\WinMerge\WinMergeU.exe";
var arguments = $"{txtJOB.Text} {txtKJOB.Text} -minimize -noninteractive -noprefs " +
     "-cfg Settings/DirViewExpandSubdirs=1 -cfg ReportFiles/ReportType=2 " +
    $"-cfg ReportFiles/IncludeFileCmpReport=1 -r -u -or {txtResultPath.Text}";

Process.Start(fileName, arguments);

答案 1 :(得分:0)

使用Arguments上的ProcessStartInfo属性

Process process = new Process();
ProcessStartInfo startInfo = new 
ProcessStartInfo(@"C:\Windows\System32\cmd.exe");
startInfo.Arguments = @"C:\Program Files\WinMerge\WinMergeU.exe" + txtJOB.Text + txtKJOB.Text + "- minimize - noninteractive - noprefs - cfg Settings / DirViewExpandSubdirs = 1 - cfg ReportFiles / ReportType = 2 - cfg ReportFiles / IncludeFileCmpReport = 1 - r - u -or" + txtResultPath.Text;
process.StartInfo = startInfo;
process.Start();

```