如何在C#中从一个应用程序启动另一个应用程序?

如何在C#中从一个应用程序启动另一个应用程序?,c#,desktop-application,launch,C#,Desktop Application,Launch,我有两个桌面应用程序。关闭第一个应用程序后,第一个应用程序将启动第二个应用程序 完成第一次申请后,如何开始第二次申请 我的第一个应用程序将创建一个单独的桌面。退出第一个应用程序时使用 var p = new Process(); p.StartInfo.FileName = "notepad.exe"; // just for example, you can use yours. p.Start(); 您可以直接使用它,因此当您即将退出第一个应用程序时,只需通过以下方式启动第二个应用程

我有两个桌面应用程序。关闭第一个应用程序后,第一个应用程序将启动第二个应用程序

完成第一次申请后,如何开始第二次申请

我的第一个应用程序将创建一个单独的桌面。

退出第一个应用程序时使用

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

您可以直接使用它,因此当您即将退出第一个应用程序时,只需通过以下方式启动第二个应用程序:

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

使用.NET的类。

您可以使用.NET的Process类启动其他人描述的流程。那么问题是什么时候打电话

在大多数情况下,使用
Form.Closing
Form.Closing
事件似乎是一个简单的选择

但是,如果其他人可以处理该事件,并且可以将
CancelEventArgs.Cancel
设置为true,则此位置可能不适合执行此操作。另外,调用
Application.Exit()
时,将不会引发
Form.Closing
Form.Closing
事件。我不确定如果发生任何未处理的异常,是否会引发这两个事件。(此外,您还必须决定在出现
application.Exit()
或任何未处理的异常时是否要启动第二个应用程序)

如果确实要确保在第一个应用程序(App1)退出后启动第二个应用程序(App2),可以玩一个小把戏:

  • 创建单独的应用程序(App0)
  • App0启动App1
  • App0等待App1与Process.WaitExit()一起退出
  • 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;
                }
            }
        }
    }
    
    一些示例代码:

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

    CSharp/PowerShell调用另一个程序并发送/接收数据:

    在某些情况下,有必要添加工作目录 为使应用程序完美运行,请将其添加到您的代码中。尤其是当应用程序依赖于DLL和其他资源时

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

    此处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);
                }
            }
    

    在这种情况下,我必须启动第二个应用程序,无论是表单关闭还是表单关闭(第一个应用程序),这都无关紧要(除非您在
    关闭中取消关闭),因为进程是异步启动的,而且它不会阻止你的应用程序继续做它应该做的事情——包括关闭。你能给你的答案添加一个解释吗?