【问题标题】:How do I launch application one from another in C#?如何在 C# 中从另一个应用程序启动应用程序?
【发布时间】:2010-11-09 22:10:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# desktop-application launch


    【解决方案1】:

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

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

    【讨论】:

    • 在什么情况下我必须启动第二个应用程序,无论是表单关闭还是表单关闭(第一个应用程序)
    • 没关系(除非您在Closing 中取消关闭),因为进程是异步启动的,它不会阻止您的应用程序继续执行它应该执行的操作 -包括关机。
    【解决方案2】:

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

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

    但是,如果其他人可以处理该事件并且可以将 CancelEventArgs.Cancel 设置为 true,那么这可能不是执行此操作的正确位置。此外,Form.ClosingForm.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;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案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();
          }
          

          【讨论】:

            【解决方案6】:

            【讨论】:

              【解决方案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);
                            }
                        }
                

                【讨论】:

                • 您能否为您的答案添加解释?
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多