从远程机器检索进程信息和文件

本文关键字:进程 检索 信息 文件 机器 程机器 | 更新日期: 2023-09-27 18:26:15

我正在尝试使用以下代码检索特定进程:

Process[] Process = Process.GetProcessesByName(_ProcessName, _Ip);

_Ip为"127.0.0.1"时,进程检索成功。当_Ip表示远程机器时,会发生以下异常:

System.InvalidOperationException occurred
  HResult=-2146233079
  Message=Couldn't connect to remote machine.
  Source=System
  StackTrace:
       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.GetProcessesByName(String processName, String machineName)
       at ToisSimulator.ToisResultsCollector.CollectResults() in d:'PI2'ThirdParty'TCC_New'TccMediator'ToisSimulator'ToisResultsCollector.cs:line 101
  InnerException: System.InvalidOperationException
       HResult=-2146233079
       Message=Couldn't get process information from performance counter.
       Source=System
       StackTrace:
            at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
            at System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)
       InnerException: System.ComponentModel.Win32Exception
            HResult=-2147467259
            Message=Access is denied
            Source=System
            ErrorCode=-2147467259
            NativeErrorCode=5
            StackTrace:
                 at System.Diagnostics.PerformanceMonitor.Init()
                 at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
                 at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
            InnerException:

我试着做了以下事情:

  1. 在两台机器之间Ping–成功

  2. 取消远程机器上的防火墙

  3. 在两台机器上启用并启动"远程注册表"服务

检索进程的目的是找到它的目录路径,并使用以下代码行读取位于该目录中的日志文件:

FileStream fStream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

从远程机器检索进程信息和文件

希望您已经尝试过在远程计算机上处理信息。它说正确的方法是有WMI

这个链接有一个很好的例子,它使用System.Management连接到远程系统并获取流程详细信息。