最近做项目遇到需要通过程序启动打开exe文件进行通信的,网上找了一篇文章,在关闭exe时遇到一点问题,所以做个记录
参考地址:
http://t.csdnimg.cn/EpPEc
我界面上用了一个button打开程序和一个richTextBox显示当前任务管理器中所有进程的名称,因为关闭exe时需要关闭名称,一开始忘了可以用程序获取了,所以就做了个显示看进程名称
界面如下:
点击按钮功能:
1.打开exe
2.获取任务管理器中所有进程,并将进程名称显示到界面
按钮点击函数如下:
private static System.Diagnostics.Process p;//打开进程对象
private void button1_Click(object sender, EventArgs e)
{
//进程对象为空则新建进程
if (p == null)
{
p = new System.Diagnostics.Process();
p.StartInfo.FileName = "C:\\Users\\realredtec003\\AppData\\Local\\Programs\\bilidown\\bilidown.exe";
p.Start();
}
else//显示窗口
{
if (p.HasExited) //是否正在运行
{
p.Start();
}
}
//设置启动时使用窗口状态
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
//获取任务管理器全部进程
Process[] pProcess;
pProcess = Process.GetProcesses();
//显示全部进程名称
richTextBox1.Text += "当前正在运行程序名称列表:" + "\n";
for (int i = 1; i <= pProcess.Length - 1; i++)
{
richTextBox1.Text += pProcess[i].ProcessName.ToString() + "\n";
}
}
考虑到界面上没有专门的退出按钮,所有选择使用窗口关闭事件来实现exe与调用窗口一起关闭
窗口关闭事件的添加
首先点击窗口
然后在属性中找到事件图标
最后滑到底部在【行为】事件中找到FormClosing并双击
由此创建窗口关闭事件函数,窗口关闭事件函数功能如下:
1.获取当前任务管理器所有进程
2.找到软件调用进程并关闭
窗口关闭事件函数代码如下:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//获取任务管理器全部进程
Process[] pProcess;
pProcess = Process.GetProcesses();
//遍历进程找到应用程序
for (int i = 1; i <= pProcess.Length - 1; i++)
{
if (pProcess[i].ProcessName == p.ProcessName)//任务管理器应用程序的名
//if (pProcess[i].ProcessName == "应用程序名称")//此处若是打开与关闭软件不同可以采用字符串查找
{
pProcess[i].Kill();
if (!pProcess[i].HasExited) // 判断进程是否已经退出
{
pProcess[i].CloseMainWindow(); // 关闭主窗口
pProcess[i].WaitForExit(5000); // 等待进程退出,最多等待5秒
break;
}
}
}
}
综上,实现点击按钮打开exe,关闭窗口时关闭调用exe功能