dotnet/runtime

`process.MainModule` throws `Win32Exception` instead of `InvalidOperationException` when process has exited in some cases

Open

#105.090 aberto em 18 de jul. de 2024

Ver no GitHub
 (3 comments) (0 reactions) (0 assignees)C# (5.445 forks)batch import
area-System.Diagnostics.Processdocumentationhelp wanted

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

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

Guia do colaborador