diff --git a/src/installer/pkg/snap/snapcraft.yaml b/src/installer/pkg/snap/snapcraft.yaml old mode 100755 new mode 100644 diff --git a/src/libraries/System.Diagnostics.Process/src/Resources/Strings.resx b/src/libraries/System.Diagnostics.Process/src/Resources/Strings.resx index c3877c0f36533e..82c5f81597e970 100644 --- a/src/libraries/System.Diagnostics.Process/src/Resources/Strings.resx +++ b/src/libraries/System.Diagnostics.Process/src/Resources/Strings.resx @@ -185,6 +185,9 @@ The specified executable is not a valid application for this OS platform. + + An error occurred trying to start process '{0}' with working directory '{1}'. {2} + StandardOutputEncoding is only supported when standard output is redirected. diff --git a/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj b/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj index e4f10fa90630d5..abc273f110fa35 100644 --- a/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj +++ b/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj @@ -46,6 +46,8 @@ + s return result.ToString(); } + + private static string GetErrorMessage(int error) => Interop.Kernel32.GetMessage(error); } } diff --git a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.cs b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.cs index 7cc5538ddb4b1c..396b0f0dae264b 100644 --- a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.cs +++ b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.cs @@ -1686,6 +1686,13 @@ private void CheckDisposed() } } + private static Win32Exception CreateExceptionForErrorStartingProcess(string errorMessage, int errorCode, string fileName, string? workingDirectory) + { + string directoryForException = string.IsNullOrEmpty(workingDirectory) ? Directory.GetCurrentDirectory() : workingDirectory; + string msg = SR.Format(SR.ErrorStartingProcess, fileName, directoryForException, errorMessage); + return new Win32Exception(errorCode, msg); + } + /// /// This enum defines the operation mode for redirected process stream. /// We don't support switching between synchronous mode and asynchronous mode. diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index 9921aac3e947cb..cbc80bebc8d96b 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -220,6 +220,8 @@ public void TestStartWithBadWorkingDirectory() Win32Exception e = Assert.Throws(() => Process.Start(psi)); Assert.NotEqual(0, e.NativeErrorCode); + Assert.Contains(program, e.Message); + Assert.Contains(workingDirectory, e.Message); } else { @@ -232,7 +234,9 @@ public void TestStartWithBadWorkingDirectory() public void ProcessStart_UseShellExecute_OnWindows_OpenMissingFile_Throws() { string fileToOpen = Path.Combine(Environment.CurrentDirectory, "_no_such_file.TXT"); - Assert.Throws(() => Process.Start(new ProcessStartInfo { UseShellExecute = true, FileName = fileToOpen })); + AssertExtensions.ThrowsContains( + () => Process.Start(new ProcessStartInfo { UseShellExecute = true, FileName = fileToOpen }), + fileToOpen); } [ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.HasWindowsShell))] @@ -1398,6 +1402,7 @@ public void TestStartWithMissingFile(bool fullPath) Win32Exception e = Assert.Throws(() => Process.Start(path)); Assert.NotEqual(0, e.NativeErrorCode); + Assert.Contains(path, e.Message); } [Fact]