控制台应用程序触发进程然后自行关闭

时间:2010-08-19 13:05:20

标签: c# .net multithreading process

我正在为我的应用编写一个小更新程序。 我的流程是这样的: app.exe - >调用进程(updater.exe) - > app.close() 然后,更新程序检查应用程序是否已关闭,然后覆盖app.exe和其他附属程序集。

所以我需要做这样的事情:启动我的C#exe应用程序,为updater.exe启动一个进程,然后关闭应用程序,但不关闭子进程。

有一种方法可以在.NET中构建这种即发即弃的过程吗?

谢谢你, 南多

3 个答案:

答案 0 :(得分:3)

查看Process对象。您只需调用Process.Start:

System.Diagnostics.Process.Start("updater.exe");

答案 1 :(得分:0)

是的,我这样做了,但似乎Process没有开始......

我做了一个名为Updater的小助手类:

Updater.CheckUpdates() 

- >启动一个调用“updater.exe -check”的进程,该方法有效(当进程完成时,控制返回到我的主应用程序)。我评估进程的返回代码,如果需要,我设置Updater.UpdatesAvalilable bool标志。

Updater.ApplyUpdates()

- >启动一个调用“updater.exe -update”的进程,进行更新工作。

所以,我的代码是这样的:

    Updater.CheckUpdates();
    if (Updater.UpdatesAvailable)
    {
        Updater.ApplyUpdates();
        System.Environment.Exit(0);
    }

Updater.ApplyUpdates()中的进程永远不会运行。 我知道,代码不是很优雅,但我不知道如何实现我的目标。 : - )

谢谢! 南多

答案 2 :(得分:0)

早上好。 看来,我找到了一种让它起作用的方法。 在我的帮助器类中,我连接了用于获取stdIO和stdError的事件,只是为了记录某些东西;删除那些,我完成了我的工作:流程启动和主要退出! : - )

只是为了让所有人都知道它:我的流程声明现在是这样的:

            Process process = new Process();
        process.EnableRaisingEvents = true;

        process.StartInfo = new ProcessStartInfo();
        process.StartInfo.Arguments = "-update";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.ErrorDialog = false;
        process.StartInfo.FileName = "updater.exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();

        process.Start();

谢谢大家! 南多