一个exe启动调用、关闭另一个exe
在 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")