C# 在exe中启动另外一个exe时的关闭方法

在C#中,如果你想要从一个exe程序中启动另一个exe程序,并希望在需要时能够关闭它。

 

一、启动外部exe程序:

使用System.Diagnostics.Process启动程序,代码如下:

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    FileInfo exePath = new FileInfo(Common.GetRunPath());//获取程序启动路径
    string path = System.IO.Path.Combine(exePath.Directory.FullName, "Other", "OtherEXE.exe");
    try
    {
        using (System.Diagnostics.Process baa = System.Diagnostics.Process.Start(path))
        {
            baa.WaitForInputIdle(500);
        }
    }
    catch (Exception ex)
    {
    }
}

 

二、关闭外部exe程序:

在C#中,如果你通过Process类启动了另一个exe程序,你可以调用Process类的CloseMainWindow或者Kill方法来关闭它:

  1. CloseMainWindow()方法: 这个方法会发送一个关闭消息到主窗口,模拟用户点击窗口关闭按钮的行为。如果该进程只运行了一个主线程且没有处理这个关闭消息,那么整个进程将会结束。但如果被启动的应用程序有后台线程或其他未完成的任务,可能无法完全关闭。

  2. Kill()方法: 这个方法会强制终止进程及其所有子线程,无论它们是否正在执行重要任务。这是最直接但也是最粗暴的方法,可能会导致数据丢失或者其他未预期的问题。

建议首先尝试使用CloseMainWindow方法,如果无法正常关闭再考虑使用Kill方法。

Process process = new Process();
// 设置启动信息(例如文件路径等)
process.Start();

// ... 在适当的时候关闭进程
process.CloseMainWindow();
if (!process.HasExited)
{
    // 如果CloseMainWindow未能关闭进程,则强制结束
    process.Kill();
}

 

或是使用Process.GetProcesses() 是一个静态方法,它返回当前系统中所有正在运行的进程的一个数组。然后匹配进程名称,使用Kill()方法: 

private void btnClose_Click(object sender, RoutedEventArgs e)
{
       Process[] process = Process.GetProcesses();
       foreach (Process prc in process)
       {
           if (prc.ProcessName == "OtherEXE")
               prc.Kill();
       }
}

注意的是,关闭一个外部进程可能会影响到运行中的数据和资源,因此请谨慎使用Kill方法,并尽量确保外部exe程序能够正常处理关闭事件。

 

或是直接在进程中查找进程名,直接使用。

// 启动新的进程
Process processToStart = new Process();
processToStart.StartInfo.FileName = "path_to_your_exe";
processToStart.Start();

// ... 在适当的时候关闭进程
// 假设你知道启动的exe的名称(这里是"YourExeName.exe")
Process[] processes = Process.GetProcessesByName("YourExeName.exe");
if (processes.Length > 0)
{
    // 关闭主窗口(如果有)
    processes[0].CloseMainWindow();
    // 等待一段时间看是否已退出
    processes[0].WaitForExit(5000); // 等待5秒

    if (!processes[0].HasExited)
    {
        // 如果仍未退出,则强制结束
        processes[0].Kill();
    }
}

 

 

你可能感兴趣的:(C#,c#)