C# Winform 启动和停止进程

启动和停止进程

一、启动进程

方法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;

        }

    }

}

 

posted on 2012-10-29 11:57  the Jade Emperor  阅读(2601)  评论(0编辑  收藏  举报

导航