Process类的属性与使用

时间:2022-03-17 14:04:03

属性

 

 


Process 属性

公共属性

(请参见 受保护的属性 )    名称   说明  
   BasePriority   获取关联进程的基本优先级。  
   Container    获取 IContainer,它包含 Component。 (从 Component 继承。)  
    EnableRaisingEvents   获取或设置在进程终止时是否应激发 Exited 事件。  
    ExitCode   获取关联进程终止时指定的值。  
   ExitTime   获取关联进程退出的时间。  
   Handle   返回关联进程的本机句柄。  
   HandleCount   获取由进程打开的句柄数。  
    HasExited   获取指示关联进程是否已终止的值。  
    Id   获取关联进程的唯一标识符。  
   MachineName   获取关联进程正在其上运行的计算机的名称。
  
   MainModule   获取关联进程的主模块。  
    MainWindowHandle   获取关联进程主窗口的窗口句柄。  
   MainWindowTitle   获取进程的主窗口标题。  
   MaxWorkingSet   获取或设置关联进程的允许的最大工作集大小。  
   MinWorkingSet   获取或设置关联进程的允许的最小工作集大小。  
   Modules   获取已由关联进程加载的模块。  
   NonpagedSystemMemorySize   获取分配给此进程的未分页的系统内存大小。  
   NonpagedSystemMemorySize64   获取为关联的进程分配的非分页系统内存量。  
   PagedMemorySize   获取分页的内存大小。  
   PagedMemorySize64   获取为关联的进程分配的分页内存量。  
   PagedSystemMemorySize   获取分页的系统内存大小。   /过时
  PagedSystemMemorySize64   获取为关联的进程分配的可分页系统内存量。  
   PeakPagedMemorySize   获取峰值分页内存大小。   /过时
   PeakPagedMemorySize64   获取关联的进程使用的虚拟内存分页文件中的最大内存量。  
   PeakVirtualMemorySize   获取峰值虚拟内存大小。   /过时
   PeakVirtualMemorySize64   获取关联的进程使用的最大虚拟内存量。  
   PeakWorkingSet   获取关联进程的峰值工作集大小。  
   PeakWorkingSet64   获取关联的进程使用的最大物理内存量。  
   PriorityBoostEnabled   获取或设置一个值,该值指示主窗口拥有焦点时是否由操作系统暂时提升关联进程的优先级。  
   PriorityClass   获取或设置关联进程的总体优先级类别。  
   PrivateMemorySize   获取专用内存大小。   /过时
   PrivateMemorySize64   获取为关联的进程分配的专用内存量。  
   PrivilegedProcessorTime   获取此进程的特权处理器时间。  
   ProcessName   获取该进程的名称。  
   ProcessorAffinity   获取或设置一些处理器,此进程中的线程可以按计划在这些处理器上运行。  
    Responding   获取指示进程的用户界面当前是否响应的值。  
   SessionId   获取关联的进程的终端服务会话标识符。  
    Site    获取或设置 Component 的 ISite。 (从 Component 继承。)  
   StandardError   获取用于读取应用程序错误输出的流。  
   StandardInput   获取用于写入应用程序输入的流。  
   StandardOutput   获取用于读取应用程序输出的流。  
    StartInfo   获取或设置要传递给 Process 的 Start 方法的属性。  
   StartTime   获取关联进程启动的时间。  
   SynchronizingObject   获取或设置用于封送由于进程退出事件而发出的事件处理程序调用的对象。  
   Threads   获取在关联进程中运行的一组线程。  
   TotalProcessorTime   获取此进程的总的处理器时间。  
   UserProcessorTime   获取此进程的用户处理器时间。  
   VirtualMemorySize   获取进程的虚拟内存大小。/过时  
   VirtualMemorySize64   获取为关联的进程分配的虚拟内存量。  
   WorkingSet   获取关联进程的物理内存使用情况。  
   WorkingSet64   获取为关联的进程分配的物理内存量。  
页首 
受保护的属性

   名称   说明  
   CanRaiseEvents    获取一个指示组件是否可以引发事件的值。 (从 Component 继承。)  
   DesignMode    获取一个值,用以指示 Component 当前是否处于设计模式。 (从 Component 继承。)  
    Events    获取附加到此 Component 的事件处理程序的列表。 (从 Component 继承。)

 


使用

 

先引用命名空间:using System.Diagnostics;

小例:

//在现有窗口中打开baidu

System.Diagnostics.Process.Start("http://www.baidu.com");

//在新窗口中打开baidu
using System.Diagnostics;
Process ps=new Process();
string yourURL="http://www.baidu.com
";
ps.StartInfo.FileName="iexplore.exe";
ps.StartInfo.Arguments=yourURL;
ps.Start();

1.process类的使用

Start 启动进程资源将其与process类关联

Kill立即关闭进程

waitforExit 在等待关联进程的退出

Close 释放与此关联的所有进程

/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2007-6-17
* Time: 16:20

* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
//process类的名空间
using System.Diagnostics;

namespace process
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm
{
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}

public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();

//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
//启动IE主页http://www.baidu.com/
void Button1Click(object sender, System.EventArgs e)
{
Process.Start("IExplore.exe","http://www.baidu.com/");
}
//启动资源管理器
void Button2Click(object sender, System.EventArgs e)
{
Process.Start("explorer.exe");
}
//启动office中的EXCEl
void Button3Click(object sender, System.EventArgs e)
{
Process.Start("EXCEL.exe");
}
//启动WINDOWS播放器
void Button4Click(object sender, System.EventArgs e)
{
Process.Start("dvdplay.exe");
}
}
}
源码下载:http://download.csdn.net/source/195507

http://download1.csdn.net/down3/20070617/17164940911.rar 用C#来实现相同的效果,发现C#本身方便的进程线程机制使工作变得简单至极,随手记录一下。

2.首先,我们可以通过设置Process类,获取输出接口,代码如下:

     Process proc = new Process();
proc .StartInfo.FileName = strScript;
proc .StartInfo.WorkingDirectory = strDirectory;
proc .StartInfo.CreateNoWindow = true;
proc .StartInfo.UseShellExecute = false; 
proc .StartInfo.RedirectStandardOutput = true;
proc .Start();

然后设置线程连续读取输出的字符串:

     eventOutput = new AutoResetEvent(false);
AutoResetEvent[] events = new AutoResetEvent[1];
events[0] = m_eventOutput;

     m_threadOutput = new Thread( new ThreadStart( DisplayOutput ) );
m_threadOutput.Start();
WaitHandle.WaitAll( events );

线程函数如下:

   private void DisplayOutput()
{
while ( m_procScript != null && !m_procScript.HasExited ) 
{
string strLine = null;
while ( ( strLine = m_procScript.StandardOutput.ReadLine() ) != null) 
{
m_txtOutput.AppendText( strLine + "/r/n" );
m_txtOutput.SelectionStart = m_txtOutput.Text.Length;
m_txtOutput.ScrollToCaret(); 
}
Thread.Sleep( 100 ); 
}
m_eventOutput.Set();
}

这里要注意的是,使用以下语句使TextBox显示的总是最新添加的,而AppendText而不使用+=,是因为+=会造成整个TextBox的回显使得整个显示区域闪烁

     m_txtOutput.AppendText( strLine + "/r/n" );
m_txtOutput.SelectionStart = m_txtOutput.Text.Length;
m_txtOutput.ScrollToCaret();

为了不阻塞主线程,可以将整个过程放到一个另一个线程里就可以了

 

3.bat文件控制参数的方法:


将你的net use //172.16.17.1 /user:username password写到bat文件中,然后运行下面代码就可以了。
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.CreateNoWindow = false;
process.StartInfo.FileName = "d://netuse.bat";
process.Start();

程序控制参数方法:

System.Diagnostics.ProcessStartInfo psi = 
new System.Diagnostics.ProcessStartInfo();
//prompt
psi.FileName = @"C:/WINDOWS/system32/cmd.exe"; // Path for the cmd prompt
psi.Arguments =@"net use //172.16.17.1 /user:username password";
psi.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process.Start(psi);
就是用进程启动cmd.exe

使用Process类运行ShellExecute的一个问题(点击查看引用) 
只有在STA线程上ShellExecute 才能确保工作无误。在Process的实现中,并没有考虑到这个问题,所以使用Process类运行ShellExecute可能会出错。如果你不能保证 调用Process.Start的线程的ApartmentState,可以使用如下的代码来避免这个问题:

using System;
using System.Threading;
public class Foo {
public static void OpenUrl()    {
System.Diagnostics.Process.Start(@"http://www.google.com");
}
public static void Main() {
ThreadStart openUrlDelegate = new ThreadStart(Foo.OpenUrl);
Thread myThread = new Thread(openUrlDelegate);
myThread.SetApartmentState(ApartmentState.STA);    
myThread.Start();
myThread.Join();

}

}