Исключительная информация о процессе чтения, через Process.GetProcesses(строка), из Windows 7
У меня проблемы с установленным производственным сервисом.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}
Сообщение "Не удалось получить информацию о процессе из счетчика производительности". строка
Исходная "системная" строка
StackTrace " at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLiblibrary)\r\n в System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)" строка
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 ответа
Оказывается, проблема была в том, что служба "Удаленный реестр" не была запущена на целевом компьютере!
Это объясняет, почему взлом брандмауэра не имел никакого эффекта. Спасибо всем, кто предложил помощь.
Да, попробуйте передать фактическое имя компьютера (не IP-адрес) в функцию:
Process.GetProcesses("MyMachineName")
Вы можете напечатать ipconfig /all
в командной строке и найдите "Имя хоста", чтобы узнать имя машины.