我正在尝试为我开发的平台启动外部更新程序应用程序。 我想启动此更新程序的原因是因为我的configuration实用程序处理更新和平台的许可证configuration具有与部署更新的文件夹中的其他程序集的共享依赖项。 所以,虽然我可以重命名configuration实用程序并在部署更新时覆盖它,但我不能重命名或覆盖它所依赖的DLL。 因此,外部更新应用程序。
我正在处理configuration实用程序中的所有更新收集逻辑,然后尝试启动更新程序来处理实际的文件复制/覆盖操作。 很显然,由于使用中的文件问题,我需要configuration实用程序在更新程序启动后立即退出。
我遇到的问题是我使用启动更新程序的标准Process.Start方法,只要configuration实用程序退出,updater进程也会被终止。
有没有什么办法可以创build一个超出其父级的进程,或者启动一个可以超越启动它的程序的外部应用程序?
编辑:
显然,在我的更新应用程序中,我错误地计算了传递给它的命令行参数的数量。 因此,更新程序会立即退出。 我曲解了这个意思,就是说启动程序正在杀死“孩子”进程,实际上并不是这样。
下面的答案是正确的。
你能分享一些代码吗? 看来你看到的问题有一个不同的原因,因为当你的应用程序退出时, Process
类不会Process.Start
使用Process.Start
启动的任何进程。
看到这个简单的示例程序,计算器将保持打开:
using System.Diagnostics; class Program { static void Main(string[] args) { Process.Start(@"C:\windows\system32\calc.exe"); } }
Process.Start
启动的进程没有理由在启动器退出时自动死掉。 我的猜测是你在更新中做了一些奇怪的事情。
我已经写了一个更新器来完成这种事情,并没有问题。
例如:
Launcher.cs:
using System; using System.Diagnostics; class Launcher { static void Main() { Console.WriteLine("Launching launchee"); Process.Start("Launchee.exe"); Console.WriteLine("Launched. Exiting"); } }
Launchee.cs:
using System; using System.Threading; class Launchee { static void Main() { Console.WriteLine(" I've been launched!"); Thread.Sleep(5000); Console.WriteLine(" Exiting..."); } }
分别编译它们,然后运行Launcher.exe。 “启动”程序肯定比启动程序持续更久。
只是从我有雾的记忆的思想,但我似乎记得有一个讨论一回,当Process.Start方法从窗体调用生成的进程有某种依赖性(不知道是什么,为什么或如何,内存是有点雾)。
为了解决这个问题,在主窗体/ app退出之后,应用程序的Main()方法实际调用了一个标志,并且如果从Main()方法启动该进程,那么eveything工作就没有问题了。
只是一个想法,就像我说的,这完全是来自内存,但是在这里发布的一些例子都是从控制台应用程序的Main()方法调用的,似乎慢跑了一些东西。
希望一切都适合你。