Как запустить приложение одно из другого в C #? - PullRequest
19 голосов
/ 11 июля 2009

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

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

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

Ответы [ 8 ]

17 голосов
/ 11 июля 2009

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

В большинстве случаев использование события 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;
            }
        }
    }
}
17 голосов
/ 11 июля 2009

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

var p = new Process();
p.StartInfo.FileName   = "notepad.exe";  // just for example, you can use yours.
p.Start();
3 голосов
/ 11 июля 2009

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

System.Diagnostics.Process.Start(@"PATH\NAME.EXE");
1 голос
/ 11 июля 2009

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

0 голосов
/ 14 июня 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);
            }
        }
0 голосов
/ 05 марта 2019

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

 TestProcess.StartInfo.FileName = "notepad.exe"; 
 TestProcess.StartInfo.WorkingDirectory = @"C:\\blah\blah\Directory of notepad.exe\";
 TestProcess.Start();
0 голосов
/ 24 декабря 2014

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

0 голосов
/ 06 марта 2014

Пример кода:

try
{
  stateMainLayout b = new stateMainLayout();
 b.Location = Screen.AllScreens[1].WorkingArea.Location;
 b.ShowDialog();
 }
catch
{
 stateMainLayout b = new stateMainLayout();
b.ShowDialog();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...