问题描述

在传统的基于 .NET Framework 的 WPF 程序中,我们可以使用如下代码段启动相关的默认应用:
# 启动默认文本编辑器打开 helloworld.txt Process.Start("helloworld.txt"); # 启动默认浏览器打开
https://hippiezhou.fun/ Process.Start("https://hippiezhou.fun/");
但是上述协议方式在 .NET Core 中不再适用,当我们使用上述方式进行操作,程序会给我们爆如下的错误:


经 神樹桜乃 <https://www.cnblogs.com/Moen/> 大佬提醒,我特意看了一下 ProcessStartInfo 的说明,如下图所示:



所以,这样一来我们就有两种方式来启动文件的关联应用了。

解决方法

方法一

手动创建 ProcessStartInfo 对象,并设置 UseShellExecute=True,示例代码如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.UseShellExecute
= true; startInfo.FileName = "https://hippiezhou.fun"; Process.Start(startInfo);
方法二

使用 UWP平台下的 中的 Launcher 来启动管理应用。

注:使用如下方法的前提是需要我们的机器上安装 Windows 10 任一版本的 SDK,否则无法正常使用。

做过 UWP 开发的朋友应该对 Launcher 族下的 API 有所了解,这个下面的相关方法能够启动系统默认应用。我们想在 .NET Core 3.0
WPF 使用这个族的 API 需要进行一些配置才可以。

首先,我们需要修改我们的 .csproj 文件,使项目能够使用上述的 API,修改如下所示:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF>
</PropertyGroup> <!--新增节点--> <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> </Project>
然后,重新加载我们的项目,这个时候就可以使用 Launcher 了。比如,我们可以使用如下方式调用默认浏览器打开目标网址:
await Launcher.LaunchUriAsync(new Uri("https://hippiezhou.fun/"));
相关参考

* C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?
<https://walterlv.com/post/use-shell-execute-in-process-start-info.html>
* Windows.System.Launcher
<https://docs.microsoft.com/en-us/uwp/api/Windows.System.Launcher>
* How to launch another app using protocol on .NET Core 3.0 WPF app
<https://techcommunity.microsoft.com/t5/Windows-Dev-AppConsult/How-to-launch-another-app-using-protocol-on-NET-Core-3-0-WPF-app/ba-p/400540>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信