如何创建一个超过其父级的流程

Chr*_*ter 10 c# windows process

我正在尝试为我开发的平台启动外部更新程序.我想启动此更新程序的原因是因为我处理平台更新和许可证配置的配置实用程序与将部署更新的文件夹中的其他程序集共享依赖关系.因此,虽然我可以重命名配置实用程序并在部署更新时覆盖它,但我无法重命名或覆盖它所依赖的DLL.因此,外部更新程序应用程序.

我正在处理配置实用程序中的所有更新收集逻辑,然后尝试启动更新程序以处理实际的文件复制/覆盖操作.显然,由于文件正在使用中,我需要配置实用程序在更新程序开始后立即退出.

我遇到的问题是我使用标准的Process.Start方法启动更新程序,一旦配置实用程序退出,更新程序进程也会被终止.

有没有什么方法可以创建一个超过其父级的进程,或者启动一个可以超出启动它的程序运行的外部应用程序?

编辑:

显然,在我的更新程序应用程序中,我错误地计算了传递给它的命令行参数的数量.因此,更新程序将立即退出.我误解了这意味着启动器应用程序正在杀死"子"进程,而事实上并非如此.

以下答案是正确的.

Dir*_*mar 12

你能分享一些代码吗?您看到的问题似乎有不同的原因,因为Process该类不会终止Process.Start您的应用程序退出时使用的任何进程.

看到这个简单的示例程序,计算器将保持打开状态:

using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Process.Start(@"C:\windows\system32\calc.exe");
    }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

启动过程没有理由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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Launchee.cs:

using System;
using System.Threading;

class Launchee
{
    static void Main()
    {
        Console.WriteLine("       I've been launched!");
        Thread.Sleep(5000);
        Console.WriteLine("       Exiting...");
    }
}
Run Code Online (Sandbox Code Playgroud)

单独编译它们,然后运行Launcher.exe."launchee"过程肯定比发射器持续时间更长.