-
Notifications
You must be signed in to change notification settings - Fork 7.1k
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
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
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.
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! 🗣️ 🔗 https://forms.office.com/r/P926k48jRJ |
… accessible for the returned `Process` object (#20749)
… accessible for the returned `Process` object (PowerShell#20749)
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.
Thanks a lot
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
,.ps1
and.psm1
files have the correct copyright headerWIP:
or[ WIP ]
to the beginning of the title (theWIP
bot will keep its status check atPending
while the prefix is present) and remove the prefix when the PR is ready.(which runs in a different PS Host).