dotnet/runtime

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

オープン

#105,090 opened on 2024/07/18

 (3 件のコメント) (0 件のリアクション) (0 人の担当者)C# (5,445 件のフォーク)batch import
area-System.Diagnostics.Processdocumentationhelp wanted

Repository metrics

Stars
 (17,886 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド