在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用

本文介绍在.NETCore环境下启动默认应用的两种方法,包括通过创建ProcessStartInfo对象并设置UseShellExecute属性,以及使用UWP平台下的LauncherAPI。文章详细解释了配置过程和代码实现。
摘要由CSDN通过智能技术生成

问题描述

在传统的基于 .NET Framework 的 WPF 程序中,我们可以使用如下代码段启动相关的默认应用:

# 启动默认文本编辑器打开 helloworld.txt
Process.Start("helloworld.txt");

# 启动默认浏览器打开 https://hippiezhou.fun/
Process.Start("https://hippiezhou.fun/");

但是上述协议方式在 .NET Core 中不再适用,当我们使用上述方式进行操作,程序会给我们爆如下的错误:
749711-20190421130915451-880420000.png

神樹桜乃 大佬提醒,我特意看了一下 ProcessStartInfo 的说明,如下图所示:

749711-20190421202028874-306642092.png

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

解决方法

方法一

手动创建 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/"));

相关参考

转载于:https://www.cnblogs.com/hippieZhou/p/10683191.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值