Fix #20400, Start-Process with -NoNewWindow returns null ExitCode on Process object with -PassThru#20749
Merged
daxian-dbw merged 5 commits intoPowerShell:masterfrom Dec 7, 2023
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.
Collaborator
|
@CodeCyclone Please add test(s) to avoid regressions. |
jborean93
reviewed
Nov 22, 2023
src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
Outdated
Show resolved
Hide resolved
SteveL-MSFT
requested changes
Nov 27, 2023
Contributor
Author
iSazonov
reviewed
Dec 1, 2023
src/Microsoft.PowerShell.Commands.Management/commands/management/Process.cs
Outdated
Show resolved
Hide resolved
Removed referencing issue
daxian-dbw
approved these changes
Dec 7, 2023
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) |
Contributor
|
📣 Hey @CodeCyclone, how did we do? We would love to hear your feedback with the link below! 🗣️ 🔗 https://forms.office.com/r/P926k48jRJ |
daxian-dbw
pushed a commit
that referenced
this pull request
Dec 7, 2023
… accessible for the returned `Process` object (#20749)
5 tasks
22 tasks
chrisdent-de
pushed a commit
to chrisdent-de/PowerShell
that referenced
this pull request
Sep 12, 2024
… accessible for the returned `Process` object (PowerShell#20749)
21 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

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).