diff --git a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs index af02b8a2b6141f..b0ab947e02b1d5 100644 --- a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs +++ b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs @@ -119,6 +119,8 @@ private void RefreshCore() { _signaled = false; _haveMainWindow = false; + _mainWindowTitle = null; + _haveResponding = false; } /// Additional logic invoked when the Process is closed. diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index ca9a3f6dbacef5..193c26b65a7e6b 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1596,6 +1596,42 @@ public void MainWindowHandle_GetWithGui_ShouldRefresh_Windows() } } + [Fact] + [OuterLoop] + [Trait(XunitConstants.Category, XunitConstants.IgnoreForCI)] // Pops UI + [PlatformSpecific(TestPlatforms.Windows)] + public void MainWindowTitle_GetWithGui_ShouldRefresh_Windows() + { + const string ExePath = "notepad.exe"; + Assert.True(IsProgramInstalled(ExePath)); + + using (Process process = Process.Start(ExePath)) + { + try + { + Assert.Equal(string.Empty, process.MainWindowTitle); + + for (int attempt = 0; attempt < 50; ++attempt) + { + process.Refresh(); + if (process.MainWindowTitle != string.Empty) + { + break; + } + + Thread.Sleep(100); + } + + Assert.NotEqual(string.Empty, process.MainWindowTitle); + } + finally + { + process.Kill(); + Assert.True(process.WaitForExit(WaitInMS)); + } + } + } + [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] public void MainWindowTitle_NoWindow_ReturnsEmpty() {