当前位置:首页 > C#学习 > 正文内容

C# 进程类 Process

小道5年前 (2018-12-22)C#学习4842

在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能。它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。

Process.Start 方法,启动(或重用)此 Process 组件的 StartInfo 属性指定的进程资源,并将其与该组件关联。如果启动了进程资源,则为 true;如果没有启动新的进程资源(例如,如果重用了现有进程),则为 false。

Process.StartInfo 属性,获取或设置要传递给 Process 的 Start 方法的属性。StartInfo 表示用于启动进程的一组参数。 调用 Start 时,StartInfo 用于指定要启动的进程。 唯一必须设置的 StartInfo 成员是 FileName 属性。

ProcessStartInfo.FileName 属性,获取或设置要启动的应用程序或文档。FileName 属性不需要表示可执行文件。 它可以是其扩展名已经与系统上安装的应用程序关联的任何文件类型。

ProcessStartInfo.CreateNoWindow属性,获取或设置指示是否在新窗口中启动该进程的值。

Process.Kill 方法,立即停止关联的进程。Kill 强制终止进程,Kill 方法将异步执行。 在调用 Kill 方法后,请调用 WaitForExit 方法等待进程退出,或者检查 HasExited 属性以确定进程是否已经退出。 

进程结束后调用其他方法:

在调用某个进程结束后,我们通常需要执行其他的方法,比如,在做安装程序时,需要先判断.Net Framework环境是否安装,若未安装,则先调用.NET Framework安装程序后,继续运行安装程序方法。 通常这种情况下,有两种方法:

方法一:WaitForExit()方法。这种方法会阻塞当前进程,直到运行的外部程序退出。

System.Diagnostics.Process exep = System.Diagnostics.Process.Start(@"C:\Windows\Notepad.exe");   
exep.WaitForExit();//关键,等待外部程序退出后才能往下执行   
MessageBox.Show("Notepad.exe运行完毕");

上述代码在Notepad.exe记事本结束之后,弹出对话框。


方法二:Exited 事件。为外部进程添加一个事件监视器,当退出后,获取通知,这种方法时不会阻塞当前进程,你可以处理其它事情。

System.Diagnostics.Process exep = new System.Diagnostics.Process();   
exep.StartInfo.FileName = @"C:\Windows\Notepad.exe";   
exep.EnableRaisingEvents = true;   
exep.Exited += new EventHandler(exep_Exited);   
exep.Start();   
  
void exep_Exited(object sender, EventArgs e)   
{   
MessageBox.Show("Notepad.exe运行完毕");   
}

在事件结束之后,调用Exited 事件方法。


对于在C#程序开发中调用外部程序的操作,要判断这个被调用的EXE文件是否执行结束其实最跟本的是 System.Diagnostics.Process类的应用,其中有一个方法,就是WaitForExit();和HasExited属性,这两个也 都是为判断外部程序exe文件的执行状态而设计的,HasExited=ture时表示执行结束.


小例子:

image.png

using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.IO;

namespace 进程类
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Clear();//清空 文本框
            Process[] pros= Process.GetProcesses();//获取当前所有进程
            foreach (var item in pros)//循环
            {
                textBox1.AppendText(item+"\r\n");//输出
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Process[] pros= Process.GetProcesses();//获取当前所有进程
            foreach (var item in pros)//循环
            {
                item.Kill();//杀死进程
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Process.Start("notepad");//打开记事本
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Process.Start("calc");//打开计算器
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Process.Start("mspaint");//打开画图
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Process.Start("Iexplore","http://www.daobk.com");//打开浏览器
        }

        private void button7_Click(object sender, EventArgs e)
        {
            string path = textBox2.Text;//获取路径
            if (File.Exists(path))//判断 文件是否存在
            {
                ProcessStartInfo psi = new ProcessStartInfo(path);//指定启动进程时使用的诸如应用程序或文档的文件名。
                Process p = new Process();//实例化
                p.StartInfo = psi;//赋值
                p.Start();//启动
            }
            else
            {
                MessageBox.Show("要打开的文件不存在!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//提示
            }
        }
    }
}

输出结果:

image.png


以上内容节选自《博客园

其他详解参考《CSDN

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://www.daobk.com/post/155.html

标签: 进程类
分享给朋友:

“C# 进程类 Process” 的相关文章

.NET C#第一个控制台应用程序 Hello, World!(你懂得)。

.NET C#第一个控制台应用程序 Hello, World!(你懂得)。

“Hello, World”程序指的是只在计算机屏幕上输出“Hello, World!”(意为“世界,你好!”)这行字符串的计算机程序。一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初学者所编写的第一个程序。它还可以用来确定该语言的编译器、程序开发环境,以及运行环境是否已经安装妥...

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。

while语句:用 while continue实现计算1到100之间的除了能被7整除之外所有整数的和。            int i = 1;/...

函数:给我一个字符串,然后字符串使用我指定的分隔符来进行分割

函数:给我一个字符串,然后字符串使用我指定的分隔符来进行分割

函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。有了函数写代码就像拼积...

面向对象概念

面向对象概念

面向对象不是取代面向过程的。类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例(Instance)。类就像int,对象就像10。字段Field(和某个对象相关的变量),字段就是类的状态。人这个类有姓名、年龄、身高等字段。类...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。