23

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

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

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

4

8 回答 8

20

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

var p = new Process();
p.StartInfo.FileName   = "notepad.exe";  // just for example, you can use yours.
p.Start();
于 2009-07-11T04:51:50.120 回答
18

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

在大多数情况下,使用 anyForm.ClosingForm.Closedevent 似乎是一个简单的选择。

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

如果你真的想确保第二个应用程序 (App2) 在第一个应用程序 (App1) 退出后启动,你可以玩一个技巧:

  1. 创建一个单独的应用程序 (App0)
  2. App0 启动 App1
  3. App0 使用 Process.WaitExit() 等待 App1 退出
  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;
            }
        }
    }
}
于 2009-07-11T08:11:30.513 回答
2

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

System.Diagnostics.Process.Start(@"PATH\NAME.EXE");
于 2009-07-11T04:52:21.100 回答
1

使用 .NET 的Process类。

于 2009-07-11T04:52:49.477 回答
0

一些示例代码:

try
{
  stateMainLayout b = new stateMainLayout();
 b.Location = Screen.AllScreens[1].WorkingArea.Location;
 b.ShowDialog();
 }
catch
{
 stateMainLayout b = new stateMainLayout();
b.ShowDialog();
}
于 2014-03-06T09:47:34.143 回答
0

CSharp/PowerShell 调用另一个程序并发送/接收数据: https ://huseyincakir.wordpress.com/2014/12/23/sending-input-from-csharppowershell-to-another-program/

于 2014-12-24T09:47:13.090 回答
0

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

 TestProcess.StartInfo.FileName = "notepad.exe"; 
 TestProcess.StartInfo.WorkingDirectory = @"C:\\blah\blah\Directory of notepad.exe\";
 TestProcess.Start();
于 2019-03-05T16:57:40.053 回答
0

这里 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);
            }
        }
于 2019-06-14T09:32:49.710 回答