【问题标题】:C# Change folder and start process in CMD, wait for it to finishC#更改文件夹并在CMD中启动进程,等待它完成
【发布时间】:2016-11-23 22:11:28
【问题描述】:

我需要从我的 Windows 窗体应用程序中打开一个外部进程。更重要的是,我需要在应用程序运行期间执行几次。基本上,我在命令提示符下多次执行带有参数的 .exe 文件,但是我需要将文件夹更改为 .exe 所在的位置才能使其正常工作。 到目前为止,我是这样打开 cmd 的:

 ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
        processStartInfo.RedirectStandardInput = true;
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.UseShellExecute = false;

        Process process = Process.Start(processStartInfo);

然后使用 process.WriteLine 向 CMD 提供命令。

process.StandardInput.WriteLine("Awin.exe -X " + filePath + "/" + fileNumber + " ID=\"" + id + "\"");

而且我不需要对几个 fileNumber 文件执行此操作。另外,我需要等待从输入开始的过程结束,然后再继续下一个。 有没有更好的方法来做到这一点,因为我没有从使用 process.WaitForExit 得到好的结果

【问题讨论】:

  • 你是什么意思使用 process.WaitForExit 没有得到好的结果?订阅Process.Exited 事件是否会产生准确/可靠/等结果?
  • 我的意思是,在通知WaitForExit完成后,从cmd调用的Awin.exe仍然保持运行,虽然WaitForExit注册为完成了。
  • 与 Process.Exited 事件的结果相同吗?否则,您可以获得 Awin.exe 的 ProcessID,当它退出时继续轮询进程,检查 ProcessID 是否仍然存在

标签: c# cmd process


【解决方案1】:

ProcessStartInfo 类有一个WorkingDirectory 属性。

ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
processStartInfo.WorkingDirectory = your_directory
(...)

//do your thing
Process process = Process.Start(processStartInfo);

参数可以通过Arguments 属性传递

【讨论】:

  • 我试过这个,但我总是得到一个异常,说目录名无效。我应该使用反斜杠而不是斜杠吗?
  • 您可以通过尝试Directory.Exists来获得正确的目录名称。
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多