程序开发 > C# > Winform > 正文

一个exe启动调用、关闭另一个exe

亮术网 2020-08-30 本网原创

在 Winform 软件开发过程中,常常需要用主程序启动调用另一个exe程序,一个典型的例子就是软件在线更新;通过主程序 exe 启动更新程序 exe,下载完更新文件后,由更新 exe 关闭主程序 exe,然后替换主程序 exe,更新完成后,再由更新程序 exe 启动主程序 exe。

一个exe启动调用另一个 exe,可以带参数也可以不带;如果带参数,启动另一个 exe 前,此 exe 必须没有正在运行,否则会失败。下面分别看看一个 exe 如何启动另一个 exe,及一个 exe 怎么关闭另一个 exe。

 

一、一个exe启动调用另一个exe

1、不带参数

方法一:System.Diagnostics.Process.Start(exe路径),例如,System.Diagnostics.Process.Start("D:\program\winform\update.exe")

,在同一解决方案中,也可以写相对路径。

 

方法二:

using System.Diagnostics;

//启动exe绝对路径
  private void StartExe(string filePath)
  {
    Process proc = new Process();
    proc.StartInfo.UseShellExecute = true;//是否使用操作系统外壳程序启动进程

  proc.StartInfo.WorkingDirectory = filePath;//启动进程的初始目录
    proc.Start();
  }

调用:StartExe("D:\program\winform\update.exe");

 

2、带参数

方法一:

System.Diagnostics.Process.Start("D:\program\winform\update.exe", parm);

在被启动exe中接收:

static void Main(string[] args)
  {
    if (args != null && args.Length == 1)
    string parm = args[0];
  }

 

方法二:

using System;
  using System.Diagnostics;

//启动exe绝对路径
  private void StartExe(string filePath)
  {
    Process proc = new Process();
    proc.StartInfo.UseShellExecute = true;//是否使用操作系统外壳程序启动进程

  proc.StartInfo.WorkingDirectory = filePath;//启动进程的初始目录
    proc.StartInfo.Arguments = arg1 + " " + arg2;//传递的参数
    proc.Start();
  }

在被启动exe中接收:

private void Form1_Load(object sender, EventArgs e)
  {
    string[] arrArgs = Environment.GetCommandLineArgs();
    if (arrArgs.Length > 1)
    {
      string arg0 = arrArgs[0].ToString();//第0个参数是它本身的路径
      string arg1 = arrArgs[1].ToString();
      string arg2 = arrArgs[2].ToString();
    }
  }

 

 

二、一个exe关闭另一个exe

//exeName 关闭的exe进程名
  private void CloseExe(string exeName)
  {
    Process[] arrPro = Process.GetProcessesByName(exeName);
    foreach (Process pro in arrPro)
      pro.Kill();
  }

调用:CloseExe("update")