The exception is thrown when you try to access the MainModule
property. The documentation for this property does not list Win32Exception
as a possible exception, but looking at the IL for the property it is evident that accessing it may throw this exception. In general it will throw this exception if you are trying to do something that is impossible or not allowed in the OS.
Win32Exception
has the property NativeErrorCode
and also a Message
that will explain what the problem is. You should use that information to troubleshoot your problem. NativeErrorCode
is the Win32 error code. We can guess all day long what the problem is but the only way to actually figure this out is to inspect the error code.
But to continue guessing, one source of these exceptions is accessing 64 bit processes from a 32 bit process. Doing that will throw a Win32Exception
with the following message:
A 32 bit processes cannot access modules of a 64 bit process.
You can get the number of bits of your process by evaluating Environment.Is64BitProcess
.
Even running as a 64 bit process you will never be allowed to access MainModule
of process 4 (System) or process 0 (System Idle Process). This will throw a Win32Exception
with the message:
Unable to enumerate the process modules.
If you problem is that you want to make a process listing similar to the one in Task Manager you will have to handle process 0 and 4 in a special way and give them specific names (just as Task Manager does). Note that on older versions of Windows the system process has ID 8.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…