Windows-Xp

為什麼我會收到性能計數器錯誤?

  • April 1, 2016

我正在嘗試編寫 C# 程式碼來遠端訪問電腦 (XP sp2) 以查明程序是否正在執行。除了過去幾天我一直在閱讀的內容之外,我對性能計數器了解不多,但這是我的問題:

對於故障排除,當我使用 psList ( pslist \\target -u user -p pass) 訪問目標電腦時,我收到此錯誤:

Cannot connect to remote registry on <computer>
Access is denied.
Failed to take process snapshot on <computer>
Make sure that Remote Registy service is running on the remote system, that you have firewall ports allow RPC access, and your account has read access the following key on the remote system: HKLM\Software\Microsoft\Windows NT\CurrentVersion\perflib

當我以管理員身份使用 psList 時,我得到了同樣的錯誤,除了它說The network path was not found而不是Access is denied. 無論我是在我的普通帳戶中“以管理員身份執行”還是我實際登錄我的管理員帳戶並從那裡執行命令,我都會得到這個。

遠端系統資料庫正在目標電腦上執行。

當我以管理員身份使用 sc 查詢 ( sc \\target query) 時,我收到此錯誤:

[SC] OpenSCManager FAILED 5:
Access is Denied

當我的這部分 C# 程式碼執行時,Process[] targetProcess = Process.GetProcessesByName(string process, string ip);(我在這裡使用一個 ip 地址作為我的字元串,而不是電腦名稱),我得到這個冗長的錯誤:

System.InvalidOperationException:無法連接到遠端電腦。—> System.InvalidOperationException:無法從性能計數器獲取程序資訊。—> System.ComponentModel.Win32Exception:在 System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item) 的 System.Diagnostics.PerformanceMonitor.Init() 找不到網路路徑。 — 內部異常堆棧跟踪結束 —

在 System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library) 在 System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine) — 內部異常堆棧跟踪結束—

在 System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine) 在 System.Diagnostics.ProcessManager.GetProcessInfos(String machineName) 在 System.Diagnostics.Process.GetProcesses(String machineName) 在 System.Diagnostics.Process.GetProcessesByName(String processName) , String machineName) at (methodname) in c:(pathname):line 132

  • 文件和列印機共享已開啟
  • Admin$ 共享已啟用
  • 我公司使用的網路監控服務(由於 wi-fi 問題我不能依賴它,因此我正在編寫程式碼)能夠訪問目標電腦上的程序並告訴我它們是否正在執行。所以我知道它們是可以訪問的。
  • 我在 FAILED 5 上做了一些閱讀,但沒有結果
  • 我已經從 Microsoft 完成了操作(關於對可用於遠端訪問的系統資料庫項進行故障排除)
  • 我也從微軟經歷過這個。(與上麵類似)
  • 從微軟那裡讀到了關於使用性能計數器的大部分內容
  • 我查看了 Perfmon 中的東西,它們似乎做得很好(下拉列表中有每個問題排查人員都會引導您訪問的項目,而不是數字或空白)
  • 我瀏覽了其他一些我忘記的問題和想法

從我有限的知識來看,性能計數器似乎工作正常,但我仍然收到這些錯誤,表明它們是問題所在。為什麼我會收到這些錯誤?

考慮到這個答案最終變得多麼容易,我對此感到有些愚蠢。幾個星期以來,我一直在努力解決這個問題和類似的問題。一位同事發現並碰巧已經在批處理和 C# 中得到了答案。

事實證明這是一個權限問題,而不是性能計數器。這回答了我的大部分問題。這個命令解決了這個sc query問題:

NET USE \\target\IPC$ /u:user pass

我不知道 IPC$ 份額。插入後,我可以在目標上自由使用sc query,query process和其他遠端命令。有趣的是,雖然我仍然無法使用psList. 雖然我不需要它,所以沒有研究它。

C# 程式碼很長——當我拿到程式碼時,我會把它放在這裡。基本上,它所做的只是創建一個 Process 對象並插入上面的那段命令行程式碼。之後,我可以執行其餘的 C# 程式碼以從目標中獲取正在執行的程序。

引用自:https://serverfault.com/questions/767155