用C#获取进程信息Word下载.docx
《用C#获取进程信息Word下载.docx》由会员分享,可在线阅读,更多相关《用C#获取进程信息Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
Process组件用于访问系统进程。
初始化Process组件后,可使用该组件来获取有关当前运行的进程的信息。
此类信息包括线程集、加载的模块(.dll和.exe文件)和性能信息(如进程当前使用的内存量)。
系统进程在系统上由其进程标识符唯一标识。
与许多Windows资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。
句柄是表示资源标识符的一般术语。
即使进程已退出,操作系统仍保持进程句柄,该句柄通过Process组件的Handle属性访问。
因此,可以获取进程的管理信息,如ExitCode(通常,或者为零表示成功,或者为非零错误代码)和ExitTime。
句柄是非常有价值的资源,所以句柄泄漏比内存泄漏危害更大。
七、回到frmProcessInfo.cs[设计]页,双击btnGetProcessByID按钮,则IDE自动添加btnGetProcessByID_Click事件在frmProcessInfo.cs
里。
在btnGetProcessByID_Click事件中,填写以下代码:
try
strings="
System.Int32processid;
//Retrievetheadditionalinformationaboutaspecificprocess
processid=Int32.Parse(txtProcessID.Text);
process=System.Diagnostics.Process.GetProcessById(processid);
s=s+"
该进程的总体优先级类别:
+Convert.ToString(process.PriorityClass)+"
\r\n"
由该进程打开的句柄数:
+process.HandleCount+"
该进程的主窗口标题:
+process.MainWindowTitle+"
该进程允许的最小工作集大小:
+process.MinWorkingSet.ToString()+"
该进程允许的最大工作集大小:
+process.MaxWorkingSet.ToString()+"
该进程的分页内存大小:
+process.PagedMemorySize+"
该进程的峰值分页内存大小:
+process.PeakPagedMemorySize+"
System.Windows.Forms.MessageBox.Show(s);
}
catch
System.Windows.Forms.MessageBox.Show("
不合法的进程ID!
);
【注】Int32值类型表示值介于-2,147,483,648到+2,147,483,647之间的有符号整数。
Int32提供了一些方法,来比较该类型的实例、将实例的值转换为它的String表示形式以及将数字的String表示形式转换为该类型的实例。
有关格式规范代码如何控制值类型的String表示形式的信息,请参阅格式设置概述。
此类型实现接口IComparable、IFormattable和IConvertible。
使用Convert类进行转换,而不是使用此类型的IConvertible显式接口成员实现。
八、主要代码我们已经填写完毕。
下面使用菜单“生成”>
“生成解决方案”命令后,按F5即可测试程序了。
以下为当前进程列表以及某一个特定ID进程的基本信息抓图:
值得一提的是,Process类具有很多成员变量,这些成员变量可以获得进程的几乎每一个细节。
上面的例子中只是简单地选择了几个成员加以演示。
如果开发中有需要,可以参考MSDNLibrary,查询Process类成员以获得更详细的信息,这里就不一一列出了。
以上通过一个简单的例子来说明如何使用.NETFramework和C#的Process类来获得进程的信息。
通过这个例子我们可以看出,C#提供给我们强大和便捷的Process类,使我们的开发更容易、更方便。
这对于编写高效、快速开发应用程序是非常有帮助的。
希望能有更多的朋友提供更好的意见和建议,也欢迎大家分享更多的开发、学习经验。
C#关闭excel进程方法[转载]
2009-07-0816:
09
一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit();
也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的是如何kill当前这个进程,这里我们先看一下代码:
oExcelApp.Quit();
oExcelApp=null;
PublicMethod.Kill(oExcelApp);
//调用kill当前excel进程
PublicMethod.Kill()内容是:
usingSystem.Runtime.InteropServices;
publicclassPublicMethod
publicPublicMethod()
{
//
//TODO:
在此处添加构造函数逻辑
}
[DllImport("
User32.dll"
CharSet
=
CharSet.Auto)]
publicstaticexternintGetWindowThreadProcessId(IntPtrhwnd,outintID);
publicstaticvoidKill(Excel.Applicationexcel)
{
IntPtrt=newIntPtr(excel.Hwnd);
//得到这个句柄,具体作用是得到这块内存入口
intk=0;
GetWindowThreadProcessId(t,outk);
//得到本进程唯一标志k
System.Diagnostics.Processp=System.Diagnostics.Process.GetProcessById(k);
//得到对进程k的引用
p.Kill();
//关闭进程k
这样我们就可以关闭当前进程excel而不是杀掉所有的类型为excel进程了
C#操作完EXCEL如何砌底关闭进程
2009-04-2117:
16
有用C#编程操作EXCEL的朋友可能都遇到过在操作完EXCEL之后,无法关闭EXECL进程的情况。
这样即浪费了内存资源,又会造成软件的不稳定性。
一般我位都是以下面方式关闭的,但很多时候都没成功/
System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
Range=null;
myBook=null;
myExcel=null;
C#和A下excel进程一被打开,有时就无法关闭,
尤其是website.对关闭该进程有过GC、release等方法,但这些方法并不是在所有情况下均适用。
于是提出了kill
process的方法,
目前我见过的方法多是用进程创建时间筛选excel.exe进程,
然后kill。
这样的方法是不精确的,
也是不安全的,
通过对网上一些关于Api运用文章的阅读,
我找到了更为直接精确找到这个process并kill的方法,以下就是代码
using
System.Runtime.InteropServices;
[DllImport("
public
static
extern
int
GetWindowThreadProcessId(IntPtr
hwnd,
out
ID);
protected
void
Button1_Click(object
sender,
EventArgs
e)
{
Excel.ApplicationClass
excel
new
Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Workbooks.Open("
d:
\aaa.xls"
Type.Missing,
Type.Missing);
IntPtr
t
IntPtr(excel.Hwnd);
k
0;
GetWindowThreadProcessId(t,
k);
System.Diagnostics.Process
p
System.Diagnostics.Process.GetProcessById(k);
C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
2009-07-1611:
27
一年前,从网上找到一些C#导出MSExcel的例子,但是都不能彻底销毁其所创建的Excel进程,典型的就是进程中的EXCEL.EXE不能关掉。
网上的解决方案大部分是杀掉所有的Excel进程,偶一直感觉不爽。
最近,做了几个月的WinForm,接触了一些进程、句柄方面的知识。
于是试着解决一下,没想到成功了,创建的Excel进程被成功Kill掉了,而其它Excel进程则相安无事。
看代码吧:
1.usingSystem;
2.usingSystem.Collections.Generic;
3.usingSystem.Text;
4.usingSystem.Reflection;
5.usingSystem.Runtime.InteropServices;
6.usingSystem.Drawing;
7.
8.namespaceVeryCodes.Common.MyExcel
9.{
10.
///<
summary>
11.
///ExcelClass的摘要说明。
12.
/summary>
13.
publicclassMSExcel
14.
{
15.
16.
///构建ExcelClass类
17.
18.
publicMSExcel()
19.
20.
//别忘了需要添加ExcelLibrary的引用
21.
this.m_objExcel=newMicrosoft.Office.Interop.Excel.Application();
22.
}
23.
24.
25.
26.
paramname="
objExcel"
>
Excel.Application<
/param>
27.
publicMSExcel(Microsoft.Office.Interop.Excel.ApplicationobjExcel)
28.
29.
this.m_objExcel=objExcel;
30.
31.
32.
33.
///列标号,Excel最大列数是256
34.
35.
privatestring[]ALists=newstring[]{
36.
A"
"
B"
C"
D"
E"
F"
G"
H"
I"
J"
K"
L"
M"
N"
O"
P"
Q"
R"
S"
T"
U"
V"
W"
X"
Y"
Z"
37.
AA"
AB"
AC"
AD"
AE"
AF"
AG"
AH"
AI"
AJ"
AK"
AL"
AM"
AN"
AO"
AP"
AQ"
AR"
AS"
AT"
AU"
AV"
AW"
AX"
AY"
AZ"
38.
BA"
BB"
BC"
BD"
BE"
BF"
BG"
BH"
BI"
BJ"
BK"
BL"
BM"
BN"
BO"
BP"
BQ"
BR"
BS"
BT"
BU"
BV"
BW"
BX"
BY"
BZ"
39.
CA"
CB"
CC"
CD"
CE"
CF"
CG"
CH"
CI"
CJ"
CK"
CL"
CM"
CN"
CO"
CP"
CQ"
CR"
CS"
CT"
CU"
CV"
CW"
CX"
CY"
CZ"
40.
DA"
DB"
DC"
DD"
DE"
DF"
DG"
DH"
DI"
DJ"
DK"
DL"
DM"
DN"
DO"
DP"
DQ"
DR"
DS"
DT"
DU"
DV"
DW"
DX"
DY"
DZ"
41.
EA"
EB"
EC"
ED"
EE"
EF"
EG"
EH"
EI"
EJ"
EK"
EL"
EM"
EN"
EO"
EP"
EQ"
ER"
ES"
ET"
EU"
EV"
EW"
EX"
EY"
EZ"
42.
FA"
FB"
FC"
FD"
FE"
FF"
FG"
FH"
FI"
FJ"
FK"
FL"
FM"
FN"
FO"
FP"
FQ"
FR"
FS"
FT"
FU"
FV"
FW"
FX"
FY"
FZ"
43.
GA"
GB"
GC"
GD"
GE"
GF"
GG"
GH"
GI"
GJ"
GK"
GL"
GM"
GN"
GO"
GP"
GQ"
GR"
GS"
GT"
GU"
GV"
GW"
GX"
GY"
GZ"
44.
HA"
HB"
HC"
HD"
HE"
HF"
HG"
HH"
HI"
HJ"
HK"
HL"
HM"
HN"
HO"
HP"
HQ"
HR"
HS"
HT"
HU"
HV"
HW"
HX"
HY"
HZ"
45.
IA"
IB"
IC"
ID"
IE"
IF"
IG"
IH"
II"
IJ"
IK"
IL"
IM"
IN"
IO"
IP"
IQ"
IR"
IS"
IT"
IU"
IV"
46.
};
47.
48.
49.
///获取描述区域的字符
50.
51.
x"
<
52.
y"
53.
returns>
/returns>
54.
publicstringGetAix(intx,inty)
55.
56.
if(x>
256){return"
57.
strings="
58.
s=s+ALists[x-1].ToString();
59.
s=s+y.ToString();
60.
returns;
61.
62.
63.
64.
///给单元格赋值1
65.
66.
行号<
67.
列号<
68.
align"
对齐(CENTER、LEFT、RIGHT)<
69.
text"
值<
70.
publicvoidsetValue(inty,intx,stringalign,stringtext)
71.
72.
Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss);
73.
range.set_Value(miss,text);
74.