locked
Почему я получаю странные сообщения об исключениях вроде «Эта операция не поддерживается на удаленных компьютерах» при попытке получить имена процессов на удаленном компьютере? RRS feed

  • Общие обсуждения

  • Возможность получить имена процессов на удаленном компьютере, при попытке доступа к информации о производительности процессов на этом компьютере, должна присутствовать всегда. Мы кое-что делаем в get_ProcessName: пытаемся получить имя процесса, если оно не выделено операционной системой. Мы пытаемся извлечь сведения о модуле для получения имени процесса – всего 15 знаков. Эта операция не поддерживается на удаленном компьютере, и ее не следует применять к удаленному процессу.

    Ниже приведен способ обхода этой проблемы:

    [C#]
    try {
      Console.WriteLine(myProcesses[x].ProcessName);
    } catch ( NotSupportedException ) {
      Type processType = typeof(Process);
      FieldInfo info = processType.GetField("processInfo", BindingFlags.NonPublic| BindingFlags.IgnoreCase | BindingFlags.Instance);
      Object obj = info.GetValue( myProcesses[x]);
      Type processInfoType = obj.GetType();
      FieldInfo info2 = processInfoType.GetField("processName", BindingFlags.NonPublic| BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
      String name = (string)info2.GetValue( obj);
      Console.WriteLine( name );
    }

    Вышеприведенный код использует недокументированную информацию о процессе. Этот способ обхода работает для V1.0 и V1.1, но мы не гарантируем его работы для всех экземпляров. Само собой, этот недостаток будет устранен в следующей версии продукта (Visual Studio 2005).


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:58 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 12:14
    Модератор