From b44be2f43ca4cbb09ec075efc8c39fc358370d93 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:09:25 +0000 Subject: [PATCH 1/2] Initial plan From efde8f2ec062b41d5e5695f0773094b25c94144c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:37:52 +0000 Subject: [PATCH 2/2] Fix flaky TestWindowStyle: remove ShellExecute logic and check only STARTF_USESHOWWINDOW bit Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com> --- .../tests/ProcessStartInfoTests.Windows.cs | 40 ++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessStartInfoTests.Windows.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessStartInfoTests.Windows.cs index b74e63bae8f3b6..876cc288feee9c 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessStartInfoTests.Windows.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessStartInfoTests.Windows.cs @@ -4,7 +4,6 @@ using System.IO; using System.Security; using Microsoft.DotNet.RemoteExecutor; -using Microsoft.DotNet.XUnitExtensions; using Xunit; namespace System.Diagnostics.Tests @@ -73,30 +72,18 @@ void Cleanup(string username, string _) [ConditionalTheory(typeof(ProcessStartInfoTests), nameof(IsAdmin_IsNotNano_RemoteExecutorIsSupported))] [PlatformSpecific(TestPlatforms.Windows)] - [InlineData(ProcessWindowStyle.Normal, true)] - [InlineData(ProcessWindowStyle.Normal, false)] - [InlineData(ProcessWindowStyle.Hidden, true)] - [InlineData(ProcessWindowStyle.Hidden, false)] - [InlineData(ProcessWindowStyle.Minimized, true)] - [InlineData(ProcessWindowStyle.Minimized, false)] - [InlineData(ProcessWindowStyle.Maximized, true)] - [InlineData(ProcessWindowStyle.Maximized, false)] - public void TestWindowStyle(ProcessWindowStyle windowStyle, bool useShellExecute) + [InlineData(ProcessWindowStyle.Normal)] + [InlineData(ProcessWindowStyle.Hidden)] + [InlineData(ProcessWindowStyle.Minimized)] + [InlineData(ProcessWindowStyle.Maximized)] + public void TestWindowStyle(ProcessWindowStyle windowStyle) { - if (useShellExecute && PlatformDetection.IsMonoRuntime) + (bool expectUsesShowWindow, int expectedWindowFlag) = windowStyle switch { - // https://github.com/dotnet/runtime/issues/34360 - throw new SkipTestException("ShellExecute tries to set STA COM apartment state which is not implemented by Mono."); - } - - // "x y" where x is the expected dwFlags & 0x1 result and y is the wShowWindow value - (int expectedDwFlag, int expectedWindowFlag) = windowStyle switch - { - ProcessWindowStyle.Hidden => (1, 0), - ProcessWindowStyle.Minimized => (1, 2), - ProcessWindowStyle.Maximized => (1, 3), - // UseShellExecute always sets the flag but no shell does not for Normal. - _ => useShellExecute ? (1, 1) : (0, 0), + ProcessWindowStyle.Hidden => (true, 0), // SW_HIDE is 0 + ProcessWindowStyle.Minimized => (true, 2), // SW_SHOWMINIMIZED is 2 + ProcessWindowStyle.Maximized => (true, 3), // SW_SHOWMAXIMIZED is 3 + _ => (false, 0), }; using Process p = CreateProcess((string procArg) => @@ -104,14 +91,13 @@ public void TestWindowStyle(ProcessWindowStyle windowStyle, bool useShellExecute Interop.GetStartupInfoW(out Interop.STARTUPINFO si); string[] argSplit = procArg.Split(" "); - int expectedDwFlag = int.Parse(argSplit[0]); + bool expectUsesShowWindow = bool.Parse(argSplit[0]); short expectedWindowFlag = short.Parse(argSplit[1]); - Assert.Equal(expectedDwFlag, si.dwFlags); + Assert.Equal(expectUsesShowWindow, (si.dwFlags & 0x1) != 0); // STARTF_USESHOWWINDOW is 0x1 Assert.Equal(expectedWindowFlag, si.wShowWindow); return RemoteExecutor.SuccessExitCode; - }, $"{expectedDwFlag} {expectedWindowFlag}"); - p.StartInfo.UseShellExecute = useShellExecute; + }, $"{expectUsesShowWindow} {expectedWindowFlag}"); p.StartInfo.WindowStyle = windowStyle; p.Start();