欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-19 23:24:55
问题描述 在传统的基于 .NET Framework 的 WPF 程序中,我们可以使用如下代码段启动相关的默认应用: 但是上述协议方式在 .NET Core 中不再适用,当我们使用上述方式进行操作,程序会给我们爆如下的错误: 经 "神樹桜乃" 大佬提醒,我特意看了一下 ProcessStartInf ......

问题描述

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

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

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

但是上述协议方式在 .net core 中不再适用,当我们使用上述方式进行操作,程序会给我们爆如下的错误:
在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用

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

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

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

解决方法

方法一

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

相关参考