我正在开发一个需要调用外部程序的程序,但需要等待它执行。这是在 C# 中完成的(我是全新的,但在 C++、Qt 和 C 方面有很多经验)并且 CreateProcess 似乎不是我正在寻找的东西(启动进程,然后忘记它,哪个我不需要)。
这是我的第一个 Windows 项目(或者至少,只有 Windows,绝对只有 .NET),我更习惯于为 *nix 做这种事情,我会在其中使用 fork 然后执行 child ,然后等待 child 终止。但我什至不知道从哪里开始寻找做这样的事情。
哦,我很确定我被困在 .NET 中,因为我需要对注册表的读取权限才能完成这个项目,而 .NET 的注册表访问权限绝对令人惊叹(在我看来,我没有任何东西可以比较)。
谢谢。
最佳答案
您可以使用 Process
类。它允许您指定一些有关您希望如何执行它的选项,还提供了一种方法,该方法在执行下一条语句之前等待进程退出。
查看此链接(msdn 引用): http://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.aspx
基本上你可以做的是:
Process p;
// some code to initialize it, like p = startProcessWithoutOutput(path, args, true);
p.WaitForExit();
一个初始化过程的例子(那只是我在某处使用过的一些代码):
private Process startProcessWithOutput(string command, string args, bool showWindow)
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo(command, args);
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = !showWindow;
p.ErrorDataReceived += (s, a) => addLogLine(a.Data);
p.Start();
p.BeginErrorReadLine();
return p;
}
如您在这段代码中所见,您还可以执行一些输出重定向、错误重定向....如果您深入研究类(class),我认为您会很快找到所需的内容。
关于C# 相当于 fork()/exec(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736407/