四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2530|回复: 0
打印 上一主题 下一主题

简单掌握Windows中C#启动外部程序进程的方法

[复制链接]
  • TA的每日心情
    开心
    2022-6-10 09:59
  • 366

    主题

    741

    帖子

    9649

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    9649
    跳转到指定楼层
    楼主
    发表于 2016-11-3 14:14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    许多用户在程序开发过程中需要使用C#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭。我们特在此对C#启动和关闭外部进程的方法进行一个简单的介绍。
    C#启动外部程序(进程)有两种方法:一种是直接使用C#提供的Process类,利用类的函数操作来直接启动外部程序;另一种方法是使用传统的Win32 API函数CreateProcess来实现外部进程的启动。
    使用C#提供的Process类来启动外部程序方法比较简单,例举代码如下:

    1. using System.Diagnostics; // 包含了Process类的定义

    2. int myprocessID;  // 进程ID

    3. // 方法一:直接使用.Net提供的Process类来实现外部程序的启动
    4. private void openButton_Click(object sender, EventArgs e)
    5. {
    6.   Process myProcess = Process.Start('\\NandFlash\\SerialTST.exe', ''); // 启动外部进程
    7.   myprocessID = myProcess.Id; // 获得该外部进程ID
    8. }
    复制代码

    使用传统的Win32 API函数的方法相对复杂,代码如下:

    1. using System.Runtime.InteropServices;  // 使用外部Win32 API

    2. #region Win32 API CreateProcess函数声明做函数申明。
    3. [DllImport('coredll.Dll', EntryPoint = 'CreateProcess', SetLastError = true)]
    4. extern static int CreateProcess(string strImageName, string strCmdLine,
    5.                      IntPtr pProcessAttributes, IntPtr pThreadAttributes,
    6.                        int bInheritsHandle, int dwCreationFlags,
    7.                IntPtr pEnvironment, IntPtr pCurrentDir,
    8.                IntPtr bArray, ProcessInfo oProc);

    9. public class ProcessInfo
    10. {
    11.   public int hProcess;
    12.   public int hThread;
    13.   public int ProcessID;
    14.   public int ThreadID;
    15. }
    16. #endregion
    复制代码

    方法二:使用Win32 API来实现外部程序的启动

    1. private void openButton_Click(object sender, EventArgs e)
    2. {
    3.   ProcessInfo pi = new ProcessInfo();
    4.   CreateProcess('\\NandFlash\\SerialTST.exe', '', IntPtr.Zero, IntPtr.Zero,
    5.           0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, pi);
    6.   myprocessID = pi.ProcessID;      // 得到该程序的ID
    7. }

    8.   关闭外部进程的方法就是直接通过获得的该外部进程的ID来关闭它。这里只介绍使用.Net的Process类的方法:

    9. // 关闭外部进程
    10. private void closeButton_Click(object sender, EventArgs e)
    11. {
    12.   Process myProcessA = Process.GetProcessById(myprocessID);   // 通过ID关联进程
    13.   myProcessA.Kill();          // kill进程
    14. }
    复制代码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-19 09:27 , Processed in 1.062500 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表