Skip to content

Hold a handle on a tracked process - #814

Merged
SimonCropp merged 1 commit into
mainfrom
fix-processex-handle
Aug 22, 2026
Merged

Hold a handle on a tracked process#814
SimonCropp merged 1 commit into
mainfrom
fix-processex-handle

Conversation

@SimonCropp

Copy link
Copy Markdown
Member

Process.GetProcessById holds no OS handle, so Kill, HasExited and
MainWindowHandle each re-open the id at the moment they are called. A tracked
move outlives its diff tool by design - HandleScanMove keeps it while the temp
file is still there - so hours later that id may belong to something else
entirely, and "Accept all" or "Open diff tool" would act on whatever that is.

Touching Handle at track time opens one and keeps it, and Windows will not hand
out an id while a handle to it exists, so there is nothing left to confuse the
tracked process with.

When the handle cannot be held - it exited between the probe and here, or this
account cannot open it - TryGet now reports no process rather than one it cannot
identify. The tool then goes unkilled, which is better than something else being
killed in its place.

The test asserts through the exit code, which is readable only if a handle was
open before the process ended. That is the same fact as the id being held.

Process.GetProcessById holds no OS handle, so Kill, HasExited and
MainWindowHandle each re-open the id at the moment they are called. A tracked
move outlives its diff tool by design - HandleScanMove keeps it while the temp
file is still there - so hours later that id may belong to something else
entirely, and "Accept all" or "Open diff tool" would act on whatever that is.

Touching Handle at track time opens one and keeps it, and Windows will not hand
out an id while a handle to it exists, so there is nothing left to confuse the
tracked process with.

When the handle cannot be held - it exited between the probe and here, or this
account cannot open it - TryGet now reports no process rather than one it cannot
identify. The tool then goes unkilled, which is better than something else being
killed in its place.

The test asserts through the exit code, which is readable only if a handle was
open before the process ended. That is the same fact as the id being held.
@SimonCropp
SimonCropp merged commit ed53e24 into main Aug 22, 2026
9 checks passed
@SimonCropp
SimonCropp deleted the fix-processex-handle branch August 22, 2026 07:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant