-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Fix #20400, Start-Process with -NoNewWindow returns null ExitCode on Process object with -PassThru #20749
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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.
|
@CodeCyclone Please add test(s) to avoid regressions. |
src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
Outdated
Show resolved
Hide resolved
SteveL-MSFT
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SteveL-MSFT
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
Outdated
Show resolved
Hide resolved
Removed referencing issue
src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
Outdated
Show resolved
Hide resolved
|
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 @CodeCyclone, how did we do? We would love to hear your feedback with the link below! 🗣️ |
… accessible for the returned `Process` object (#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).