Исключение выдается при попытке доступа к свойству MainModule
. Документация для этого свойства не перечисляет Win32Exception
как возможное исключение, но, глядя на IL для свойства, становится очевидно, что доступ к нему может вызвать это исключение. В целом, это исключение будет выдано, если вы пытаетесь сделать что-то, что невозможно или не разрешено в ОС.
Win32Exception
имеет свойство NativeErrorCode
, а также Message
, которое объяснит, в чем проблема. Вы должны использовать эту информацию для устранения вашей проблемы. NativeErrorCode
- код ошибки Win32. Мы можем весь день угадывать, в чем проблема, но единственный способ понять это - проверить код ошибки.
Но чтобы продолжить догадываться, одним из источников этих исключений является доступ к 64-битным процессам из 32-битного процесса. В результате вы получите Win32Exception
со следующим сообщением:
32-битные процессы не могут получить доступ к модулям 64-битного процесса.
Вы можете получить число бит вашего процесса, оценив Environment.Is64BitProcess
.
Даже при работе в качестве 64-битного процесса вам никогда не будет разрешен доступ к MainModule
процесса 4 (Система) или процесса 0 (Процесс ожидания системы). Это выдаст Win32Exception
с сообщением:
Невозможно перечислить модули процесса.
Если ваша проблема заключается в том, что вы хотите создать список процессов, похожий на тот, что в диспетчере задач, вам придется обрабатывать процессы 0 и 4 особым образом и присваивать им конкретные имена (так же, как это делает диспетчер задач). Обратите внимание, что в более старых версиях Windows системный процесс имеет идентификатор 8.