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]