简单掌握Windows中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进程
}
(0)

相关推荐

  • C#调用执行外部程序的实现方法

    本文实例讲述了C#调用执行外部程序的实现方法.分享给大家供大家参考.具体分析如下: 这里以调用notepad为例演示C#调用执行外部程序的方法. class Test { static void Main (string [] args) { System.Diagnostics.Process.Start ("notepad.exe"); } } 希望本文所述对大家的C#程序设计有所帮助.

  • 浅谈C#中Process类的使用详解

    Process类的作用是对系统进程进行管理,我们使用Process类中的一些方法结合Winform开发个简单的进程管理器: 在使用Process类的时候,先导入命名空间System.Diagnostics.使用Winform画出如上的界面,数据显示使用的是Listview.在窗体的Load事件中写出如下代码: 复制代码 代码如下: private void Form1_Load(object sender, EventArgs e)    { listView1.FullRowSelect =

  • c#使用process.start启动程序报错解决方法

    出错信息: 复制代码 代码如下: Unknown error (0xffffffff)at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)at System.Diagnostics.Process.Start()at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)at System.Diagnostics.Proc

  • C#启动外部程序的几种常用方法汇总

    本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出. 2. 启动外部程序,等待其退出. 3. 启动外部程序,无限等待其退出. 4. 启动外部程序,通过事件监视其退出. 实现代码如下: // using System.Diagnostics; private string appName = "calc.exe"; /// <summary> /// 1. 启动外部程序,不等待其退出 /// </summ

  • c#启动EXE文件的方法实例

    1.调用系统dll使用其提供的方法. 引用的dll, 复制代码 代码如下: [DllImport("kernel32.dll")]    public static extern int WinExec(string exeName, int operType); 调用,WinExec(@"路径\exe的文件名", 参数); operType参数如下 复制代码 代码如下: 0: 隐藏, 并且任务栏也没有最小化图标  1: 用最近的大小和位置显示, 激活  2: 最小

  • C#使用Process类调用外部程序分解

    在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程. 一.启动进程实例 复制代码 代码如下: Process myProcess = new Process();   try  {       myProcess.StartInfo.UseShellExecute = false;       myProcess.StartInfo.FileName = "test.exe";    

  • 解析C#中用Process类杀死进程,执行命令的深入分析

    c#之process类相关整理一.根据进程名获取进程的用户名?需要添加对 System.Management.dll 的引用 复制代码 代码如下: using System.Diagnostics;using System.Management;static void Main(string[] args){foreach (Process p in Process.GetProcesses()){Console.Write(p.ProcessName);Console.Write("----&

  • C#实现软件监控外部程序运行状态的方法

    本文实例讲述了C#实现软件监控外部程序运行状态的方法.分享给大家供大家参考.具体方法如下: 需要外挂一个程序,用于监控另一个程序运行状态,一旦检测到另一程序关闭,就触发一个事件做其他处理. 引用的类 复制代码 代码如下: using System.Diagnostics;//引入Process 类 声明 复制代码 代码如下: private Process[] MyProcesses; 主要处理部分,该段代码可放在定时器中循环检测监控的程序是否启动 复制代码 代码如下: MyProcesses

  • C#使用Process类调用外部exe程序

    在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 复制代码 代码如下: using System.Diagnostics; Process p = Process.Start("notepad.exe"); p.WaitForExit();//关键,等待外部程序退出后才能往下执行 通过上述代码可以调用记事本程序,注意如果不是调用系统程序,

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

    许多用户在程序开发过程中需要使用C#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭.我们特在此对C#启动和关闭外部进程的方法进行一个简单的介绍. C#启动外部程序(进程)有两种方法:一种是直接使用C#提供的Process类,利用类的函数操作来直接启动外部程序:另一种方法是使用传统的Win32 API函数CreateProcess来实现外部进程的启动. 使用C#提供的Process类来启动外部程序方法比较简单,例举代码如下: using System.Diagnostics;

  • Windows中Mysql启动失败的完美解决方案

    目录 一.问题描述 1.1.mysql服务启动失败1 1.2.mysql服务启动失败2 二.针对一的解决办法 2.1.问题解析 2.2.解决办法 2.2.1.存在数据的情况 三.数据恢复 3.1.mysql数据恢复 [Mysql问题]Windows中Mysql启动失败与数据恢复 一.问题描述 1.1.mysql服务启动失败1 使用命令启动:net start mysql 结果如下: 在windows计算机管理->服务->MySQL57强制启动,结果如下: 1.2.mysql服务启动失败2 通过

  • Linux和Windows中tomcat修改内存大小的方法

    其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置 实例,以下给出1G内存环境下java jvm 的参数设置参考: 复制代码 代码如下: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "JAVA_O

  • CentOS桌面环境中网卡启动失败的解决方法

    我在最小化安装CentOS中网卡启动正常,但是当我们装了桌面版的CentOS后,发现不管使用哪种启动网卡的方式都会启动失败. 截图如下: 后来查阅报错原因,NetworkManager管理工具和/etc/sysconfig/network-scripts/ifcfg-ethx配置不同步造成的. 使用下面两个命令可以解决上面网卡重启失败导致的问题: chkconfigNetworkManageroff //注释 关掉它,不让它开机自动启动 service NetworkManager stop /

  • 简单解决Windows中MySQL的中文乱码与服务启动问题

    中文乱码问题 当我第一次接触mysql,首先让我难受的是mysql的乱码问题,百度上也有许多有关的解决方案,不过作为亲身受害者,我想很有必要贴出我的心声: 1.关于mysql的字符集处理 mysql在标识数据时采取二进制字符和非二进制字符格式,前者主要用来标识图片,声音,后者就完成剩余的所有功能,而对于后者,就存在字符集设置问题. 我们知道数据库是老外搞出来的,他们在设计的时候并没有考虑到编码格式的问题,在计算机流行的现代每个国家为了支持本国的语言,都推出了自己本国的编码格式,下面利用mysql

  • 在Windows中配置Rsync同步文件的方法

    Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次只传输修改过的文件部分.传输数据过程中可以实行压缩及解压缩操作,减少带宽流量.支持scp.ssh及直接socket方式连接,支持匿名传输.支持Linux,Window平台.写本文的时候,window版最新版为4.0.5版 官网:http://rsync.samba.org/ Linux版下载:http://rsync.samba.org/

  • springboot中项目启动时实现初始化方法加载参数

    目录 springboot项目启动,初始化方法加载参数 1.@PostConstruct说明 2.@PreDestroy说明 第一种:注解@PostConstruct 第二种:实现CommandLineRunner接口 第三种:springboot的启动类 springboot初始化参数顺序 spring初始化参数顺序为 springboot项目启动,初始化方法加载参数 今天我看到项目中用到了 @PostConstruct 这个注解,之前没看到过,特地查了一下, 1.@PostConstruct

  • 简单介绍Python中用于求最小值的min()方法

    min()方法返回它的参数最小值:最接近负无穷大的值. 语法 以下是min()方法的语法: min( x, y, z, .... ) 参数 x -- 这是一个数值表达式. y -- 这也是一个数值表达式. z -- 这也是一个数值表达式. 返回值 此方法返回最小的它的参数. 例子 下面的例子显示了min()方法的使用. #!/usr/bin/python print "min(80, 100, 1000) : ", min(80, 100, 1000) print "min(

  • C#对Windows服务组的启动与停止操作

    Windows服务大家都不陌生,Windows服务组的概念,貌似MS并没有这个说法. 作为一名软件开发者,我们的机器上安装有各种开发工具,伴随着各种相关服务. Visual Studio可以不打开,SqlServer Management Studio可以不打开,但是SqlServer服务却默认开启了.下班后,我的计算机想用于生活.娱乐,不需要数据库服务这些东西,尤其是在安装了Oracle数据库后,我感觉机器吃力的很. 每次开机后去依次关闭服务,或者设置手动开启模式,每次工作使用时依次去开启服务

  • windows中oracle存储过程加密的实例代码

    在硬盘中创建一个过程test.sql create or replace procedure test_bf is begin dbms_output.put_line('test success'); end; 然后通过使用oracle自带的wrap命令对过程进行加密 先打开CMD然后输入命令 wrap iname='input_name' oname='output-name' input_name是需要加密的文件的路径,output_name是输出的文件名,如果没有oname那么生成出来的

随机推荐