5

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

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

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

谢谢。

4

3 回答 3

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

正如您在这段代码中看到的那样,您还可以进行一些输出重定向、错误重定向……如果您深入研究课程,我认为您会很快找到所需的内容。

于 2013-07-19T00:52:51.780 回答
4
var p = System.Diagnostics.Process.Start("notepad");
p.WaitForExit();
于 2013-07-19T00:52:10.730 回答
1

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

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

于 2013-07-19T00:51:59.807 回答