Как запустить приложение один из другого в С#?

У меня два настольных приложения. После закрытия первого приложения первое приложение запустит второе приложение.

Как запустить второе приложение после завершения первого приложения?

Мое первое приложение создает отдельный рабочий стол.

Ответы

Ответ 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;
            }
        }
    }
}

Ответ 2

Используйте класс процесса, когда вы выходите из своего первого приложения.

var p = new Process();
p.StartInfo.FileName   = "notepad.exe";  // just for example, you can use yours.
p.Start();

Ответ 3

Вы можете просто отключить его, поэтому, когда вы собираетесь выйти из первого приложения, просто запустите второе приложение с помощью:

System.Diagnostics.Process.Start(@"PATH\NAME.EXE");

Ответ 4

Используйте .NET Process класс.

Ответ 5

Пример кода:

try
{
  stateMainLayout b = new stateMainLayout();
 b.Location = Screen.AllScreens[1].WorkingArea.Location;
 b.ShowDialog();
 }
catch
{
 stateMainLayout b = new stateMainLayout();
b.ShowDialog();
}

Ответ 7

в некоторых случаях необходимо добавить рабочий каталог в ваш код, чтобы приложение работало идеально. особенно когда приложение имеет зависимость от DLL и других ресурсов.

 TestProcess.StartInfo.FileName = "notepad.exe"; 
 TestProcess.StartInfo.WorkingDirectory = @"C:\\blah\blah\Directory of notepad.exe\";
 TestProcess.Start();

Ответ 8

Здесь ProcName означает имя приложения, которое вы хотите запустить, но оно может запускать только системное приложение и некоторые другие приложения.

        public void Startapp(String ProcName)
        {
            try
            {
                Process firstProc = new Process();
                firstProc.StartInfo.FileName = ProcName;
                firstProc.EnableRaisingEvents = true;
                firstProc.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }