Estou tentando escrever código C # para acessar um computador (XP sp2) remotamente para descobrir se um processo está em execução. Eu não sei muito sobre contadores de desempenho além do que tenho lido nos últimos dias, mas aqui está o meu problema:
Para a solução de problemas, quando eu uso psList ( pslist \target -u user -p pass
) para acessar o computador de destino, recebo este erro:
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
Quando uso o psList como administrador, recebo o mesmo erro, exceto que diz The network path was not found
em vez de Access is denied
. Eu entendo isso se eu "Executar como administrador" na minha conta normal ou se eu realmente entrar na minha conta de administrador e executar o comando de lá.
O registro remoto está em execução no computador de destino.
Quando uso a consulta sc ( sc \target query
) como administrador, recebo este erro:
[SC] OpenSCManager FAILED 5:
Access is Denied
Quando esta parte do código C # é executada, Process[] targetProcess = Process.GetProcessesByName(string process, string ip);
(eu uso um endereço IP aqui como minha string, não um nome de computador), recebo este erro:
System.InvalidOperationException: Couldn't connect to remote machine. ---> System.InvalidOperationException: Couldn't get process information from performance counter. ---> System.ComponentModel.Win32Exception: The network path was not found
at System.Diagnostics.PerformanceMonitor.Init()
at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
--- End of inner exception stack trace ---
at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
at System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)
--- End of inner exception stack trace ---
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 (methodname) in c:(pathname):line 132
- O compartilhamento de arquivos e impressoras está em
- O compartilhamento do Admin $ está ativado
- Um serviço de monitoramento de rede usado pela minha empresa (que não posso confiar devido a problemas de wi-fi, portanto estou escrevendo código) é capaz de acessar os processos no computador de destino e me informar se eles estão em execução ou não. Então eu sei que eles são acessíveis.
- Eu fiz algumas leituras no FAILED 5 para nenhum resultado
- Eu passei por este da Microsoft (sobre como solucionar problemas de chaves de registro que funcionam com acesso remoto)
- Eu também passei por este da Microsoft. (semelhante ao acima)
- Eu li a maior parte esta da Microsoft sobre como trabalhar com contadores de desempenho
- Eu observei as coisas no Perfmon e elas parecem estar indo bem (há itens na lista suspensa que cada solucionador de problemas direciona para você, em vez de números ou um espaço em branco)
- Analisei algumas outras perguntas e ideias das quais perdi o controle
Do meu conhecimento limitado, parece que os contadores de desempenho estão funcionando bem, mas ainda estou recebendo esses erros, sugerindo que eles são o problema. Por que estou recebendo esses erros?