简单掌握Windows中C#启动外部程序进程的方法
程序员文章站
2022-05-14 17:38:09
许多用户在程序开发过程中需要使用c#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭。我们特在此对c#启动和关闭外部进程的方法进行一个简单的介绍。
...
许多用户在程序开发过程中需要使用c#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭。我们特在此对c#启动和关闭外部进程的方法进行一个简单的介绍。
c#启动外部程序(进程)有两种方法:一种是直接使用c#提供的process类,利用类的函数操作来直接启动外部程序;另一种方法是使用传统的win32 api函数createprocess来实现外部进程的启动。
使用c#提供的process类来启动外部程序方法比较简单,例举代码如下:
using system.diagnostics; // 包含了process类的定义 int myprocessid; // 进程id // 方法一:直接使用.net提供的process类来实现外部程序的启动 private void openbutton_click(object sender, eventargs e) { process myprocess = process.start('\\nandflash\\serialtst.exe', ''); // 启动外部进程 myprocessid = myprocess.id; // 获得该外部进程id } 使用传统的win32 api函数的方法相对复杂,代码如下: using system.runtime.interopservices; // 使用外部win32 api #region win32 api createprocess函数声明做函数申明。 [dllimport('coredll.dll', entrypoint = 'createprocess', setlasterror = true)] extern static int createprocess(string strimagename, string strcmdline, intptr pprocessattributes, intptr pthreadattributes, int binheritshandle, int dwcreationflags, intptr penvironment, intptr pcurrentdir, intptr barray, processinfo oproc); public class processinfo { public int hprocess; public int hthread; public int processid; public int threadid; } #endregion
方法二:使用win32 api来实现外部程序的启动
private void openbutton_click(object sender, eventargs e) { processinfo pi = new processinfo(); createprocess('\\nandflash\\serialtst.exe', '', intptr.zero, intptr.zero, 0, 0, intptr.zero, intptr.zero, intptr.zero, pi); myprocessid = pi.processid; // 得到该程序的id } 关闭外部进程的方法就是直接通过获得的该外部进程的id来关闭它。这里只介绍使用.net的process类的方法: // 关闭外部进程 private void closebutton_click(object sender, eventargs e) { process myprocessa = process.getprocessbyid(myprocessid); // 通过id关联进程 myprocessa.kill(); // kill进程 }