欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简单掌握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进程
}