• 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;

            }

        }

    }

  • 相关阅读:
    阻止JavaScript事件冒泡传递<转>
    小温谈数据库优化数据库设计篇
    名言集合
    SQL Server中获得EXEC的值<转>
    WIN2008 64位系统配置PHP的方法
    陪伴我作为程序员的9句名言<转>
    C# 的快捷键汇总(一)
    使用VB.NET开发复合控件
    C#写SQL SERVER2008存储过程
    c#图像处理入门
  • 原文地址:https://www.cnblogs.com/baishiying/p/2744495.html
Copyright © 2020-2023  润新知