Fix #20400, Start-Process with -NoNewWindow returns null ExitCode on Process object with -PassThru - #20749
Conversation
Fixing issue PowerShell#20400. This issue was introduced by change PowerShell#19096. This change moved from .NET creating process objects to use P/Invoke (Windows APIs). The code would fetch the Process object from .NET but by design it throws an exception silently and ExitCode is null because it didn't spawn the process. Calling Handle property on the fetched Process will resolve ExitCode state because it fetches the underlying SafeHandle used to update the ExitCode property.
|
Chaz Beck (@CodeCyclone) Please add test(s) to avoid regressions. |
Removed referencing issue
|
This PR has Quantification details
Why proper sizing of changes matters
Optimal pull request sizes drive a better predictable PR flow as they strike a
What can I do to optimize my changes
How to interpret the change counts in git diff output
Was this comment helpful? 👍 :ok_hand: :thumbsdown: (Email) |
|
📣 Hey Chaz Beck (@CodeCyclone), how did we do? We would love to hear your feedback with the link below! 🗣️ 🔗 https://forms.office.com/r/P926k48jRJ |
… accessible for the returned `Process` object (#20749)
… accessible for the returned `Process` object (PowerShell#20749)
… accessible for the returned `Process` object (PowerShell#20749)

PR Summary
Fixing issue #20400 along with some duplicates.
This issue was introduced by change #19096.
This change moved from .NET creating process objects to use P/Invoke (Windows APIs). The code would fetch the Process object from .NET but by design it throws an exception silently and ExitCode is null because it didn't handle spawning the process itself.
Calling the Handle property on the fetched Process will resolve ExitCode state because it fetches the underlying SafeHandle used to update the ExitCode property.
PR Context
When you call Start-Process with -NoNewWindow, ExitCode will be null. This breaks a lot of customers of PowerShell both internally and externally.
PR Checklist
.h,.cpp,.cs,.ps1and.psm1files have the correct copyright headerWIP:or[ WIP ]to the beginning of the title (theWIPbot will keep its status check atPendingwhile the prefix is present) and remove the prefix when the PR is ready.(which runs in a different PS Host).