【问题标题】:Console application fire a process then close itself控制台应用程序触发一个进程,然后自行关闭
【发布时间】:2010-08-19 13:05:20
【问题描述】:
我正在为我的应用程序编写一个小型更新程序。
我的流程是这样的:
app.exe -> 调用进程(updater.exe) -> app.close()
然后,更新程序检查应用程序是否关闭,然后覆盖 app.exe 和其他附属程序集。
所以我需要做这样的事情:启动我的 C# exe 应用程序,为 updater.exe 启动一个进程,然后关闭应用程序,但不关闭子进程。
有没有办法在 .NET 中构建这种即发即弃的过程?
谢谢,
南多
【问题讨论】:
标签:
c#
.net
multithreading
process
【解决方案1】:
查看Process 对象。您只需像这样调用 Process.Start :
System.Diagnostics.Process.Start("updater.exe");
【解决方案2】:
是的,我正在这样做,但似乎进程没有启动...
我做了一个小助手类,叫作Updater:
Updater.CheckUpdates()
--> 启动一个调用“updater.exe -check”的进程,并且该进程有效(进程完成后,控制权返回到我的主应用程序)。我评估进程的返回代码,并在必要时设置 Updater.UpdatesAvalilable 布尔标志。
Updater.ApplyUpdates()
--> 启动一个调用“updater.exe -update”的进程来完成更新工作。
所以,我的代码是这样的:
Updater.CheckUpdates();
if (Updater.UpdatesAvailable)
{
Updater.ApplyUpdates();
System.Environment.Exit(0);
}
Updater.ApplyUpdates() 中的进程永远不会运行。
我知道,不是优雅的代码,但我不知道如何实现我的目标。 :-)
谢谢!
南多
【解决方案3】:
大家早上好。
看来,我找到了一种使它起作用的方法。
在我的助手类中,我连接了获取 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();
谢谢大家!
南多