请教各位高手和微软专家,问题解决另开贴,100分。

傻乐tao 2002-12-31 11:03:50
在我的程序中,需要停止一个指定的进程,我调用的程序源码
如下:


/// <summary>
/// 判别指定路径的文件是否在内存中已经运行
/// </summary>
/// <param name="FullPathExeName">全路径的要判别文件主要是.dll和.exe文件</param>
/// <returns>
/// 在进程中: 返回 Process
/// 不在进程中:null;
/// </returns>
public static Process IsSelectExeRun(string FullPathExeName)
{

if(SysUtil.IsNull(FullPathExeName))
{
return null;
}

Process[]arrProcess=Process.GetProcesses();
foreach(Process tmpPcs in arrProcess)
{

System.Diagnostics.ProcessModule processmd = null;

try
{
processmd = tmpPcs.MainModule ;
}
catch(Exception e)
{
//ILog.writeln(e.ToString());
Debug.WriteLine("***************Error:" + e.ToString());
}

if(processmd == null || SysUtil.IsNull(processmd.FileName))
{
continue;
}

if(processmd.FileName.ToLower() == FullPathExeName.ToLower())
{
//直接Return process
return tmpPcs;
}
}

return null;
}


/// <summary>
/// 停止指定的进程
/// </summary>
/// <param name="pcsSelectedProcess">指定的进程</param>
/// <returns></returns>
public static int TerminateProcess(Process pcsSelectedProcess)
{
try
{
if(pcsSelectedProcess==null)
{
return ErrCode_NOSELECTPROCESS;
}
pcsSelectedProcess.Kill();
return ErrCode_SUCCESS;
}
catch(Exception ex)
{
//MessageBox.Show("Failed to StopProcess") ;
Tracing.Error(ex,ex);
return ErrCode_FAIL;
}
}

我是先调用IsSelectExeRun(...)看指定的EXE是否在运行 ,如果在运行 ,用返回
Process作为参数调用TerminateProcess来kill这个进程,可现在就在调用IsSelectExeRun(...)
时会有异常出现。主要是 Process[]arrProcess=Process.GetProcesses();抛出
异常。提示如下:

进程性能计数器已禁用,因此无法执行所请求的操作。
Exception Source : System
Exception StackTrace : at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
at System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)
at System.Diagnostics.ProcessManager.GetProcessInfos(String machineName)
at System.Diagnostics.Process.GetProcesses(String machineName)
at System.Diagnostics.Process.GetProcesses()
at Test.Form1.BtnGetProcess_Click(Object sender, EventArgs e)


后来我改用Process.GetProcessesByName(".")一样出现 “进程性能计数器已禁用,因此无法执行所请求的操作。
”的异常。

这是我现在的问题,不过这些情况只出现在个别机器上。请求Help....
...全文
46 点赞 收藏 2
写回复
2 条回复
saucer 2002年12月31日
go to your registry

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance

remove an entry named "Disable Performance Counters"

also see
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q248993
回复 点赞
傻乐tao 2002年12月31日
up一下
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告