Ответ 1
Вы можете использовать .NET Process Class для запуска процесса, как описано другими людьми. Тогда возникает вопрос, когда звонить.
В большинстве случаев использование события Form.Closing
или Form.Closed
представляется простым выбором.
Однако, если кто-то еще может обработать событие и может установить CancelEventArgs.Cancel
в true, это может оказаться неправильным местом для этого. Кроме того, события Form.Closing
и Form.Closed
не будут возникать при вызове Application.Exit()
. Я не уверен, возникнет ли какой-либо из событий, если возникнут какие-либо необработанные исключения. (Кроме того, вам нужно решить, хотите ли вы запустить второе приложение в случае Application.Exit()
или любого необработанного исключения).
Если вы действительно хотите, чтобы второе приложение (App2) запускалось после выхода первого приложения (App1), вы можете сыграть трюк:
- Создайте отдельное приложение (App0)
- App0 запускает App1
- App0 ожидает, что App1 завершит работу с Process.WaitExit()
- App0 запускает App2 и выходит из себя
Пример приложения консоли, приведенный ниже, показывает очень простой случай: мое приложение-образец сначала запускает блокнот. Затем, когда блокнот выходит, он запускает mspaint и выходит из себя.
Если вы хотите скрыть консоль, вы можете просто установить свойство "Тип вывода" из "Консольного приложения" в "Приложение Windows" на вкладке "Приложение" в Project Property.
Пример кода:
using System;
using System.Diagnostics;
namespace ProcessExitSample
{
class Program
{
static void Main(string[] args)
{
try
{
Process firstProc = new Process();
firstProc.StartInfo.FileName = "notepad.exe";
firstProc.EnableRaisingEvents = true;
firstProc.Start();
firstProc.WaitForExit();
//You may want to perform different actions depending on the exit code.
Console.WriteLine("First process exited: " + firstProc.ExitCode);
Process secondProc = new Process();
secondProc.StartInfo.FileName = "mspaint.exe";
secondProc.Start();
}
catch (Exception ex)
{
Console.WriteLine("An error occurred!!!: " + ex.Message);
return;
}
}
}
}