Как создать Процесс, который переживает его родителя

Я использую версию 2.

Одна из причин использовать фигурные скобки становится более понятной, если у вас нет другого.

if(SomeCondition)
{
  DoSomething();
}

Если затем вам нужно добавить еще одну строку кода, у вас меньше шансов иметь проблему:

if(SomeCondition)
{ 
  DoSomething();
  DoSomethingElse();
}

Без фигурных скобок вы могли бы сделать это:

if(SomeCondition)
   DoSomething();
   DoSomethingElse();
10
задан Chris Carter 17 June 2009 в 20:25
поделиться

3 ответа

Похоже, что проблема, которую вы видите, имеет другую причину, потому что класс Process не уничтожает никакие процессы, запущенные с использованием Process.Start , когда ваш приложение завершает работу.

Посмотрите этот простой пример программы, калькулятор останется открытым:

using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Process.Start(@"C:\windows\system32\calc.exe");
    }
}
12
ответ дан 3 December 2019 в 20:43
поделиться

Нет причин, по которым процесс, запущенный с 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. Процесс "лаунчи" определенно длится дольше, чем пусковая установка.

Я писал программу обновления, делающую именно такие вещи раньше, и это нормально.

Например:

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. Процесс "лаунчи" определенно длится дольше, чем пусковая установка.

Я писал программу обновления, делающую именно такие вещи раньше, и это нормально.

Например:

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. Процесс "лаунчи" определенно длится дольше, чем пусковая установка.

6
ответ дан 3 December 2019 в 20:43
поделиться

Просто мысль из моей туманной памяти, но я, кажется, помню, как недавно обсуждал, что когда метод Process.Start вызывается из формы, порожденный процесс имеет какую-то зависимость ( не уверен, что, почему и как, память немного нечеткая).

Чтобы справиться с этим, был установлен флаг, который фактически вызывался из метода Main () приложения после выхода из основной формы / приложения, и что если процесс был запущен из метода Main (), все сработало отлично.

Просто подумал, как я уже сказал, это чисто из памяти, но некоторые из опубликованных здесь примеров вызываются из метода Main () консольного приложения что-то подтолкнуло.

Надеюсь, у вас все хорошо.

0
ответ дан 3 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: