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

时间:2013-07-19 00:48:46

标签: c# .net process exec fork

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

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

哦,我很确定我已经陷入了.NET,因为我需要读取访问注册表来完成这个项目,.NET的注册表访问绝对是惊人的(在我看来,我没有任何东西比较它)。

感谢。

3 个答案:

答案 0 :(得分: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();

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

    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;
    }

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

答案 1 :(得分:4)

var p = System.Diagnostics.Process.Start("notepad");
p.WaitForExit();

答案 2 :(得分:2)

您可以使用Process类启动外部进程。 它会让你启动任意程序

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx