启动和停止进程
一、启动进程
方法1:
(1) 创建一个Process组件的实例,例如:
Process myProcess = new Process();
(2) 设置其对应的StartInfo属性,指定要运行的应用程序名以及传递的参数:
myProcess.StartInfo.FileName = “文件名”;
process1.StartInfo.Arguments=”参数”;
如果该进程带有图形用户界面,也可以指定图形用户界面的打开方式。
例如:
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
(3) 调用该实例的Start方法启动该进程。
方法2:
直接调用Process类提供的静态方法启动进程。
二、停止进程
通过两种方法利用Process组件停止进程。
(1) 如果进程有图形界面,调用CloseMainWindow方法。
(2) 如果进程没有用户界面,调用进程的Kill方法。
不论有没有图形用户界面,如果希望强行让其退出,在权限一允许的情况下,均可以调用Kill方法终止该进程。
下面举出一个实例,启动、停止和观察Notepad++进程。
(1) 用ListView显示“记事本”进程信息。
(2) 用Process类提供的静态方法启动进程。
(3) 终止进程时,把所有“记事本”进程全部终止。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Threading;
namespace ProcessStartKill
{
public partial class MainForm : Form
{
string _fileName = "notepad++";
int _fileIndex;
public MainForm()
{
InitializeComponent();
//以详细列表方式显示
this.listView.View = View.Details;
//参数含义,列名称,宽度,水平对齐方式
this.listView.Columns.Add("进程ID",70,HorizontalAlignment.Left);
this.listView.Columns.Add("进程名字", 70, HorizontalAlignment.Left);
this.listView.Columns.Add("占用内存", 70, HorizontalAlignment.Left);
this.listView.Columns.Add("启动时间", 70, HorizontalAlignment.Left);
this.listView.Columns.Add("文件名", 270, HorizontalAlignment.Left);
}
private void btnProStart_Click(object sender, EventArgs e)
{
//创建一个文件,然后用NotePad++打开
string argument= Application.StartupPath + "\\Myfiles"+ _fileIndex +".txt";
if (File.Exists(argument) == false)
{
File.Create(argument);
}
//获取要启动的进程名及参数
ProcessStartInfo ps = new ProcessStartInfo(_fileName, argument);
ps.WindowStyle = ProcessWindowStyle.Normal;
_fileIndex++;
Process p = new Process();
p.StartInfo = ps;
p.Start();
//等待启动完成,否则获取失败
p.WaitForInputIdle();
RefreshListView();
}
private void RefreshListView()
{
this.listView.Items.Clear();
//根据名字获取到本机的进程
Process[] pro = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(_fileName));
foreach (Process item in pro)
{
//将每个进程的名称,占用的物理内存以及进程开始的时间加入listview中
ListViewItem LVI = new ListViewItem(
new string[] {
item.Id.ToString(),
item.ProcessName,
string.Format("{0} KB",item.PrivateMemorySize64/1024.0f),
string.Format("{0}",item.StartTime),
item.MainModule.FileName
});
listView.Items.Add(LVI);
}
}
//停止进程
private void btnKill_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
//创建新的Process组件的数组,并将它们与指定的进程名称(Notepad++)的所有进?程资源相关联
Process[] myprocess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(_fileName));
foreach (Process item in myprocess)
{
//通过向进程主窗口发送关闭消息达到关闭进程的目的
item.CloseMainWindow();
//等待毫秒
Thread.Sleep(1000);
//释放与此组件相关的所有资源
item.Dispose();
}
_fileIndex = 0;
RefreshListView();
this.Cursor = Cursors.Default;
}
}
}