Updated at Apr 22, 2019
Updated to more better workaround written on comments, thank you @kodamasakuno .
The body of this article
This article is as of .NET Core 3.0 Preview 3.
If you write a code in .NET Framework WPF app like as below:
Process.Start("https://example.com"); // Open the URL using default browser
It works fine. However, in .NET Core 3.0, the code occurred following exception:
System.ComponentModel.Win32Exception HResult=0x80004005 Message=The system cannot find the file specified. Source=System.Diagnostics.Process
The cause of this issue, it is changing default value in UseShellExecute property at ProcessStartInfo class. .NET Framework is true, but .NET Core is false.
So, the workaround is following code:
Process.Start(new ProcessStartInfo("https://example.com") { UseShellExecute = true });
It works fine.
Happy coding!!
Old article
In this case, the workaround is to use Launcher.LaunchUriAsync method that is WinRT APIs.
At first, add following references to your project file.
<ItemGroup> <PackageReference Include="System.Runtime.WindowsRuntime" Version="4.3.0" /> </ItemGroup> <ItemGroup> <Reference Include="Windows"> <HintPath>$(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\10.0.17763.0\Windows.winmd</HintPath> <IsWinMDFile>true</IsWinMDFile> <Private>false</Private> </Reference> </ItemGroup>
And then, replace Process.Start to Launcher.LanuchUriAsync.
private async void FooButton_Click(object sender, RoutedEventArgs e) { //Process.Start("https://example.com"); await Launcher.LaunchUriAsync(new Uri("https://example.com")); }
It works fine.:thumbs_up:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.