如何监视另一个.exe并在其关闭时执行操作

时间:2016-08-01 16:24:23

标签: c# winforms

目前有一个程序可以打开另一个程序。如果该程序关闭,我需要执行一个动作。我对C#很陌生,所以可以帮助我指点正确的方向。

编辑:所以我能够获取当前表单以打开外部程序。然后需要关闭此表单,并且如果loader.exe关闭,则另一个表单需要具有执行操作的功能。这就是我在第一种形式中所拥有的。如何编写其他表单以了解该程序是否已结束。

public static class Program
{
    public static bool OpenManager { get; set; }
    public static int DeskNumber { get; set; }

    /// The main entry point for the application.

    [STAThread]
    static void Main(string[] arguments)
    {
        /// Do not move this!
        OpenManager = false;
        MYvariable = 0;
        /// ----------------

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Loader());

        if (OpenManager)
        {
            if (MYvariable == 1)
            {
                System.Diagnostics.Process startProgram = System.Diagnostics.Process.Start("loader.exe", "-r 52");
                startProgram.EnableRaisingEvents = true;
                Application.Run(new Manager());

3 个答案:

答案 0 :(得分:2)

假设您使用Process class启动其他程序,您可以订阅Process实例的Exited事件:

Process myProcess = Process.Start("myprogram.exe", "arguments");
myProcess.EnableRaisingEvents = true;
myProcess.Exited += (sender, e) => 
    {
       // Do what you want to do when the process exited.
    }

或者,为了更明确地执行它,声明一个在进程完成时调用的显式事件处理程序:

public void OnProcessExited(object sender, EventArgs e)
{
     // Do what you want to do when the process exited.
}

public void StartProcess()
{
    Process myProcess = Process.Start("myprogram.exe", "arguments");
    myProcess.EnableRaisingEvents = true;
    myProcess.Exited += OnProcessExited;
}

答案 1 :(得分:0)

如果您使用c#中的Process类打开并保持已打开程序的跟踪,您可以像这样处理其退出事件:

App.Exited += AppOnExited;

private static void AppOnExited(object sender, EventArgs eventArgs)
{
    // Do your action here
}

App是您的过程对象的名称。

不要忘记你可能需要在完成后删除处理程序:

App.Exited -= AppOnExited;

答案 2 :(得分:0)

如果应用程序返回int代码,您可以使用:

Process P = Process.Start("App.exe");
P.WaitForExit();
int code = P.ExitCode;

具有return的应用程序:

public static int Main(string[] args)
{
    return (int);
}

关闭时会将P.ExitCode设置为返回值。