C#中 Process的扩展类ProcessExtensions

原文链接:http://www.cnblogs.com/kevinGao/archive/2012/01/10/2323348.html
/// <summary>
    /// Process extensions
    /// </summary>
    public static class ProcessExtensions
    {
        #region Functions

        #region KillProcessAsync

        /// <summary>
        /// Kills a process
        /// </summary>
        /// <param name="Process">Process that should be killed</param>
        /// <param name="TimeToKill">Amount of time (in ms) until the process is killed.</param>
        public static void KillProcessAsync(this Process Process, int TimeToKill = 0)
        {
            if (Process == null)
                throw new ArgumentNullException("Process");
            ThreadPool.QueueUserWorkItem(delegate { KillProcessAsyncHelper(Process, TimeToKill); });
        }

        /// <summary>
        /// Kills a list of processes
        /// </summary>
        /// <param name="Processes">Processes that should be killed</param>
        /// <param name="TimeToKill">Amount of time (in ms) until the processes are killed.</param>
        public static void KillProcessAsync(this IEnumerable<Process> Processes, int TimeToKill = 0)
        {
            if (Processes == null)
                throw new ArgumentNullException("Processes");
            Processes.ForEach(x => ThreadPool.QueueUserWorkItem(delegate { KillProcessAsyncHelper(x, TimeToKill); }));
        }

        #endregion

        #region GetInformation

        /// <summary>
        /// Gets information about all processes and returns it in an HTML formatted string
        /// </summary>
        /// <param name="Process">Process to get information about</param>
        /// <param name="HTMLFormat">Should this be HTML formatted?</param>
        /// <returns>An HTML formatted string</returns>
        public static string GetInformation(this Process Process, bool HTMLFormat = true)
        {
            StringBuilder Builder = new StringBuilder();
            return Builder.Append(HTMLFormat ? "<strong>" : "")
                   .Append(Process.ProcessName)
                   .Append(" Information")
                   .Append(HTMLFormat ? "</strong><br />" : "\n")
                   .Append(Process.DumpProperties(HTMLFormat))
                   .Append(HTMLFormat ? "<br />" : "\n")
                   .ToString();
        }

        /// <summary>
        /// Gets information about all processes and returns it in an HTML formatted string
        /// </summary>
        /// <param name="Processes">Processes to get information about</param>
        /// <param name="HTMLFormat">Should this be HTML formatted?</param>
        /// <returns>An HTML formatted string</returns>
        public static string GetInformation(this IEnumerable<Process> Processes, bool HTMLFormat = true)
        {
            StringBuilder Builder = new StringBuilder();
            Processes.ForEach(x => Builder.Append(x.GetInformation(HTMLFormat)));
            return Builder.ToString();
        }

        /// <summary>
        /// Get information of the process name
        /// </summary>
        /// <param name="Process">Process to get information about</param>
        /// <returns></returns>
        public static string GetInformation(this Process Process)
        {
            return Process.ProcessName;
        }

        /// <summary>
        /// Gets information about all processes and returns it in  string
        /// </summary>
        /// <param name="Processes">Processes to get information about</param>
        /// <returns>string</returns>
        public static string GetInformation(this IEnumerable<Process> Processes)
        {
            StringBuilder Builder = new StringBuilder();
            Processes.ForEach(x => Builder.Append(x.GetInformation()));
            return Builder.ToString();
        }

        #endregion

        #endregion

        #region Private Static Functions

        /// <summary>
        /// Kills a process asyncronously
        /// </summary>
        /// <param name="ProcessName">Name of the process to kill</param>
        /// <param name="TimeToKill">Amount of time until the process is killed</param>
        private static void KillProcessAsyncHelper(Process Process, int TimeToKill)
        {
            if (TimeToKill > 0)
                Thread.Sleep(TimeToKill);
            Process.Kill();
        }

        #endregion
    }

转载于:https://www.cnblogs.com/kevinGao/archive/2012/01/10/2323348.html

展开阅读全文
博主设置当前文章不允许评论。

C# process使用

06-05

process类中能否获得指定进程的位置和启动进程的用户名?rn基本属性里没有啊...rnrnrnBasePriority 获取关联进程的基本优先级。rnEnableRaisingEvents 获取或设置在进程终止时是否应激发Exited事件。rnExitCode 获取关联进程终止时指定的值。rnExitTime 获取关联进程退出的时间。rnHandle 返回关联进程的本机句柄。rnHandleCount 获取由进程打开的句柄数。rnHasExited 获取指示关联进程是否已终止的值。rnId 获取关联进程的唯一标识符。rnMachineName 获取关联进程正在其上运行的计算机的名称。rnMainModule 获取关联进程的主模块。rnMainWindowHandle 获取关联进程主窗口的窗口句柄。rnMainWindowTitle 获取进程的主窗口标题。rnMaxWorkingSet 获取或设置关联进程的允许的最大工作集大小。rnMinWorkingSet 获取或设置关联进程的允许的最小工作集大小。rnModules 获取已由关联进程加载的模块。rnNonpagedSystemMemorySize获取分配给此进程的未分页的系统内存大小。rnPagedMemorySize 获取分页的内存大小。rnPagedSystemMemorySize 获取分页的系统内存大小。rnPeakPagedMemorySize 获取峰值分页内存大小。rnPeakVirtualMemorySize 获取峰值虚拟内存大小。rnPeakWorkingSet 获取峰值工作集大小。rnPriorityBoostEnabled 获取或设置一个值,该值指示主窗口拥有焦点时是否由操作系统暂时提升关联进程的优先级。rnPriorityClass 获取或设置关联进程的总体优先级类别。rnPrivateMemorySize 获取专用内存大小。rnPrivilegedProcessorTime 获取此进程的特权处理器时间。rnProcessName 获取该进程的名称。rnStartTime 获取关联进程启动的时间。rnThreads 获取在关联进程中运行的一组线程。rnTotalProcessorTime 获取此进程的总的处理器时间。rnUserProcessorTime 获取此进程的用户处理器时间。rnVirtualMemorySize 获取进程的虚拟内存大小。rnWorkingSet 获取关联进程的物理内存使用情况。rn 论坛

C#如何利用Process执行一组控制台命令?

11-17

现在小弟有这样一个想法:在只安装.net 2.0的情况下做一个自动编译运行C#源代码的程序。rn界面如下:[img=http://bbs.world2.com.cn/attachments/month_0711/20071117_0767a2e6ea173141198fh87iehZAB8PJ.png][/img]rn在点下查找按钮的时候打开一个“打开文件对话框”来选择文件,并对文件的路径做相应的处理。rn在殿下编译按钮的时候自动打开一个控制台,来运行以下一组操作:rn1. 设置选择文件的目录为控制台的当前目录。rn2. 编译选择的文件,并把编译信息现在在打开的控制台窗口中。rn3. 如果有错误,暂停程序运行,并把编译错误信息显示在控制台窗口中。如果没有错误,程序接着运行编译好的程序,并把运行信息也显示在这个控制台窗口中。rn4. 显示完上述信息之后,控制台暂停运行,给用户查看信息的时间。这个时候用户可以点击任意键退出。rnrn到这里,这个小软件的功能就全部介绍完毕了。这个想法是我在网易学院看了陈广老师的“C#参考视频”之后,自己也想做一个演示中陈广老师那样的小软件。但是,到此为之我就卡壳了,在点击编译按钮之后总是出现各种各样莫名其妙的问题。rnrn现在,我贴出来自己的代码。希望高手能够指点一下,和我一样的新手,咱们共同进步。rn[code=C#]rn/*rn * Created by SharpDevelop.rn * User: Lenicrn * Date: 2007-11-16rn * Time: 23:38rn *rn */rnrnusing System;rnusing System.Collections.Generic;rnusing System.Drawing;rnusing System.Windows.Forms;rnusing System.IO;rnusing System.Diagnostics;rnrnnamespace CSharp_Compilerrnrn /// rn /// Description of MainForm.rn /// rn public partial class MainForm : Formrn rn public MainForm()rn rn //rn // The InitializeComponent() call is required for Windows Forms designer support.rn //rn InitializeComponent();rnrn //rn // TODO: Add constructor code after the InitializeComponent() call.rn //rn rnrn string dir = string.Empty;//获得原始文件路径rn string name = string.Empty;//获得原始文件的名字rn string name_exe = string.Empty;//可执行文件的名字rnrn void BtnOKClick(object sender, EventArgs e)rn rn openFileDialog1.Title = "打开文件";rn openFileDialog1.Multiselect = false;rn openFileDialog1.Filter = "C#文件(*.cs)|*.cs";rn openFileDialog1.FilterIndex = 1;rn if(openFileDialog1.ShowDialog() == DialogResult.OK)rn rn dir = Path.GetDirectoryName(openFileDialog1.FileName);rn name = Path.GetFileName(openFileDialog1.FileName);rn name_exe = Path.GetFileNameWithoutExtension(openFileDialog1.FileName)+".exe";rn rn rnrn void BtnCompileClick(object sender, EventArgs e)rn rn if (dir == string.Empty)rn rn MessageBox.Show("还没有选择文件!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);rn rn elsern rn Process p = new Process();rn p.StartInfo.WorkingDirectory = dir;rn p.StartInfo.FileName = "cmd";rn p.StartInfo.Arguments = @"/c ";rn p.StartInfo.UseShellExecute = false;rn p.StartInfo.CreateNoWindow = true;rn p.StartInfo.RedirectStandardInput = true;rn p.StartInfo.RedirectStandardOutput = true;rn p.StartInfo.RedirectStandardError = true;rn p.Start();rn p.StandardInput.WriteLine("csc " + name);rn p.Close();rnrn //Process pro = new Process();rn //pro.StartInfo.FileName = "cmd";rn //pro.StartInfo.WorkingDirectory = dir;rn //pro.StartInfo.RedirectStandardInput = true;rn //pro.StandardInput.Write(tmp);rn ////pro.StandardInput.WriteLine(name_exe);rn //pro.Start();rn ////pro.WaitForExit();rn //pro.Close();rn rn rn rnrn[/code] 论坛

javaRuntimeProcess的简单介绍

09-29

在java.lang包当中定义了一个Runtime类,在java中对于Runtime类的定义如下:rnpublic class Runtimernextends Objectrn每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。rn 根据上面的话,我们知道对于每一个java程序来说都只有一个Runtime类实例,而且不能由用户创建一个Runtime实例,既然不能创建那么这个类的实例的作用是什么呢?它提供了应用程序和应用程序正在运行的环境的一个接口。Runtime不能由我们创建,我们可以通过Runtime类的一个静态方法,得到一个Runtime类的实例。获取了这个实例之后我们就可以获取java虚拟机的自由内存、也可以获取这个java虚拟机的总的内存等(具体的方法可以参照java帮助文档Runtime类的方法学习),也就是说这个类提供了应用程序了环境的接口。下面我们举一个例子程序:rnRuntime rt=Runtime.getRuntime();rnSystem.out.println(rt.freeMemory());rnSystem.out.println(rt.totalMemory());//结果返回的是数字rn Runtime类还有一个好处就是可以执行一个外部的程序,可以调用Runtime类的exec()方法传入一个命令(exec()方法有几个重载的方法,可以自己学习),创建一个子进程,结果返货一个Process类的实例,通过这个实例我们可以管理创建的子进程。对于Process类在java帮助文档中描述如下:rnpublic abstract class Processrnextends ObjectrnProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。rn rnpublic abstract class Processrnextends ObjectrnProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。rn 下面我们接着上面的代码继续写:rntryrn rt.exec("notepad");rncatch(Exception e)rn e.printStackTrace;//在使用exec()方法的时候会抛出一个异常,我们需要捕获rn这段代码,是运行在windows上的,它调用了windows系统的记事本程序。举一反三我们同样可以用这个方法去编译java的文件,只是传入的参数是“javac ***.java”。rn 对于Process类的实例主要作用是创建一个可以管理的进程,并对它进行管理。Process类还有几个方法分别是destroy() 杀掉子进程、exitValue()返回子进程的出口值、getErrorStream()获取子进程的错误流,错误流获得由该 Process 对象表示的进程的错误输出流传送的数据,还有获取输入流输出流请读者自己参照java帮助文档学习。rn 这是自己在接触Runtime类和Process类的时候学到的一些东西,分享出来希望对大家有用,大家看见了若是有不对的地方,请指出来。rn 我的QQ598660766,博客http://blog.csdn.net/mengxiangyue,欢迎大家访问,加我好友一起研究编程。rnrn 论坛

没有更多推荐了,返回首页