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

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

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

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


person Suriyan Suresh    schedule 11.07.2009    source источник


Ответы (8)


Вы можете использовать класс процесса .NET, чтобы запустить процесс, как описано другими людьми. Тогда вопрос, когда звонить.

В большинстве случаев использование события Form.Closing или Form.Closed кажется простым выбором.

Однако, если кто-то другой может обработать событие и установить для CancelEventArgs.Cancel значение true, это может быть неподходящим местом для этого. Кроме того, события Form.Closing и Form.Closed не будут вызываться при вызове Application.Exit(). Я не уверен, будет ли возникать какое-либо из событий, если возникнут какие-либо необработанные исключения. (Кроме того, вы должны решить, хотите ли вы запускать второе приложение в случае Application.Exit() или любого необработанного исключения).

Если вы действительно хотите убедиться, что второе приложение (App2) запускается после выхода из первого приложения (App1), вы можете пойти на хитрость:

  1. Создайте отдельное приложение (App0)
  2. App0 запускает App1
  3. App0 ожидает выхода App1 с помощью Process.WaitExit()
  4. App0 запускает App2 и выходит из себя

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

Если вы хотите скрыть консоль, вы можете просто установить свойство «Тип вывода» с «Консольное приложение» на «Приложение Windows» на вкладке «Приложение» свойства проекта.

Образец кода:

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;
            }
        }
    }
}
person Chansik Im    schedule 11.07.2009

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

var p = new Process();
p.StartInfo.FileName   = "notepad.exe";  // just for example, you can use yours.
p.Start();
person JP Alioto    schedule 11.07.2009
comment
в каком случае я должен запустить второе приложение, будь то закрытие формы или закрытая форма (первое приложение) - person Suriyan Suresh; 11.07.2009
comment
Это не имеет значения (если вы не отмените закрытие в Closing), так как процесс запускается асинхронно, и это не помешает вашему приложению продолжать делать то, что оно должно делать, включая завершение работы. - person Pavel Minaev; 11.07.2009

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

System.Diagnostics.Process.Start(@"PATH\NAME.EXE");
person Quintin Robinson    schedule 11.07.2009

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

person Mitch Wheat    schedule 11.07.2009

Некоторый пример кода:

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

CSharp/PowerShell вызывает другую программу и отправляет/получает данные: https://huseyincakir.wordpress.com/2014/12/23/sending-input-from-csharppowershell-to-another-program/

person huse.ckr    schedule 24.12.2014

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

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

Здесь 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);
            }
        }
person Abdul Moiz    schedule 14.06.2019
comment
Не могли бы вы добавить объяснение к вашему ответу? - person I.T Delinquent; 14.06.2019