dotnet/runtime
View on GitHub`process.MainModule` throws `Win32Exception` instead of `InvalidOperationException` when process has exited in some cases
Open
#105090 opened on Jul 18, 2024
area-System.Diagnostics.Processdocumentationhelp wanted
Description
Description
Accessing MainModule after process exit throws an exception that doesn't match the documentation. The code should either be changed to detect that case or the docs should be changed.
Reproduction Steps
using Process process = Process.GetProcessById(someId);
_ = process.Handle;
process.WaitForExit();
Console.WriteLine(process.ExitCode);
Console.WriteLine(process.MainModule?.FileName ?? "null");
Expected behavior
Throws InvalidOperationException as per docs.
Actual behavior
Throws:
Unhandled exception. System.ComponentModel.Win32Exception (299): Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
at System.Diagnostics.NtProcessManager.EnumProcessModulesUntilSuccess(SafeProcessHandle, IntPtr[], Int32, Int32&, Int32) + 0x91
at System.Diagnostics.NtProcessManager.GetModules(Int32, Boolean) + 0x110
at System.Diagnostics.NtProcessManager.GetFirstModule(Int32) + 0xf
Regression?
Not sure.
Known Workarounds
No response
Configuration
Windows 10.0.19045 X64 .NET 9
Other information
No response