从Windows 7通过Process.GetProcesses(字符串)读取进程信息的异常

时间:2011-12-09 21:12:34

标签: c# .net windows-7 system.diagnostics

我遇到了已建立的生产.NET2服务的问题。该服务从各种目标计算机收集进程信息和日志文件。它运行在80个站点没有问题;主要在Windows 2000,Windows XP和Windows 2003上。

现在,针对Windows 7目标运行时,只要服务尝试读取进程信息,就会发生异常。

代码如下:

 Process[] procs = System.Diagnostics.Process.GetProcesses("10.11.12.13");

信息:目标计算机响应ping并且目标计算机和服务计算机上都存在“adminUser”凭据。

异常信息:

ex {“无法连接到远程计算机。”} System.Exception {System.InvalidOperationException} [System.InvalidOperationException] {“无法连接到远程计算机。”} System.InvalidOperationException

Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}

InnerException {“无法从性能计数器获取进程信息。”} System.Exception {System.InvalidOperationException} [System.InvalidOperationException] {“无法从性能计数器获取进程信息。”} System.InvalidOperationException

Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}

InnerException {“找不到网络路径”} System.Exception {System.ComponentModel.Win32Exception}

消息“无法从性能计数器获取进程信息。”串

来源“系统”字符串

System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName,Boolean isRemoteMachine)中的System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLiblibrary)\ r \ n中的

StackTrace“字符串

TargetSite {System.Diagnostics.ProcessInfo [] GetProcessInfos(System.Diagnostics.PerformanceCounterLib)} System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}

消息“无法连接到远程计算机”。串

要解决此问题,我在目标计算机上禁用了Windows防火墙,但无济于事。有人有什么想法吗?


如果有人对我应该尝试的步骤和顺序有任何建议,我非常感谢您的帮助。


更新:我从监控计算机执行了“tasklist”命令,传递参数以查询远程(目标)计算机,我能够看到相同类型的过程信息,我无法以编程方式获取。

命令看起来像:

tasklist /s 10.11.12.13

返回的信息如下:

...  
notepad.exe                    672                            1      4,916 K
...  

那么,为什么.NET不能看到进程信息???

2 个答案:

答案 0 :(得分:7)

原来问题是“远程注册表”服务没有在目标计算机上运行!

这解释了为什么打击防火墙没有效果。感谢所有提供帮助的人。

答案 1 :(得分:1)

是的,尝试将实际的机器名称(而不是IP地址)传递给函数:

Process.GetProcesses("MyMachineName")

您可以在命令提示符下键入ipconfig /all并查找“主机名”以了解计算机的名称。