C#等价于fork()/ exec()

sea*_*nr8 4 .net c# fork process exec

我正在开发一个需要调用外部程序的程序,但需要等待它执行.这是在C#中完成的(我是全新的,但在C++,Qt和C方面有很多经验)并且CreateProcess似乎不是我正在寻找的(启动过程,然后忘记它,我不需要).

这是我的第一个Windows项目之一(或者至少只有Windows,当然只有.NET),而且我更习惯于为*nix做这类事情,我会在子项中使用fork然后执行exec,然后等孩子终止.但我不知道在哪里开始寻找这样的事情.

哦,我很确定我被困在.NET中,因为我需要读取访问注册表来完成这个项目,.NET的注册表访问绝对是惊人的(在我看来,我没有任何东西可以将它与).

谢谢.

ppe*_*rov 8

你可以使用这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();
Run Code Online (Sandbox Code Playgroud)

初始化进程的一个例子(这只是我曾在某处使用的一些代码):

    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;
    }
Run Code Online (Sandbox Code Playgroud)

正如你在这段代码中看到的,你也可以做一些输出重定向,错误重定向......如果你在课堂上挖掘,我想你会很快找到你需要的东西.

  • IMAO这与`fork`实际上对Linux有着根本的不同,而Windows没有类似的API,它说你可以做些什么来更好地模仿`fork`功能.`fork`不仅仅是简单地产生另一个进程,在Linux用语中通常称为`spawn`. (4认同)
  • 我也来这里寻找“叉子”。不是这个。 (4认同)