问题描述

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

# 启动默认文本编辑器打开 helloworld.txt
Process.Start("helloworld.txt"); # 启动默认浏览器打开 https://hippiezhou.fun/
Process.Start("https://hippiezhou.fun/");

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

神樹桜乃 大佬提醒,我特意看了一下 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/"));

相关参考

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

  1. 程序中保存状态的方式之Cookies

    程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#&q ...

  2. 程序中保存状态的方式之ViewState

    程序中保存状态的方式有以下几种: 1.Application 2.Cookie 3.Session 4.ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hid ...

  3. C/C++中二进制与文本方式打开文件的区别

    二进制与文本文件主要有两个大的区别: 1.换行符的区别: Windows平台下  对于Windows文本文件,它们使用回车和换行来表示换行符:如果以“文本”方式打开文件,当读取文件的时候,系统会将所有 ...

  4. MVC应用程序中管理(更新)上传的文件

    实现上传文件功能,有时上传也会操作出错,能让用户有改正有机会,开发上传文件能有更新的功能. 文件上传时,如果是存储于应用程序某一目录的话,在更新时需要了解一些流程,先是删除旧文件,更新数据表相关信息, ...

  5. 在Android程序中使用Modbus协议时报 java.net.SocketException: recvfrom failed: ECONNRESET解决办法

    最近在开发基本Modbus协议的Android端PLC控制程序,C#版程序没有任何问题,移到JAVA下出现各种问题,其中比较苦恼的是java.net.SocketException: recvfrom ...

  6. OutOfMemoryError: Java heap space和GC overhead limit exceeded在Ant的Build.xml中的通用解决方式

    这个仅仅是一点点经验,总结一下,当中前两个相应第一个Error.后两个相应第二个Error,假设heap space还不够.能够再改大些. <jvmarg value="-Xms512 ...

  7. secureCRT 中各种传输协议分析 启动daemon运行守护进程(转)

    转载链接:http://blog.sina.com.cn/s/blog_61798d5d01018yk4.html [Telnet]著名的终端访问协议,传统的网络服务程序,如FTP.POP和Telne ...

  8. 在微信小程序中使用LeanCloud(一)

    之前学习了微信小程序前端,使用到LeanCloud线上数据库 [传送门].作为一个前端开发人员,了解后端及数据库是学习工作的需要. LeanCloud直接登录,未注册直接创建账户.它是一款免费的线上数 ...

  9. C++程序中调用WebService的实现

    前言 因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C+ ...

随机推荐

  1. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  2. Docker 快速开始

    1.  概念 对于开发人员和系统管理员来说,Docker是一个使用容器开发.部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.容器并不新鲜,但是将它们用于轻松部署应用程序却很新鲜. ...

  3. ES6之Promise学习与实践

    1.前言 在平时的业务开发中,前端通常需要请求后台获取数据,或者NodeJs读取文件等等一系列的异步操作,我们通常需要利用异步操作的结果或者对异步操作的结果进行处理.通常我们的解决方案是:在异步操作成 ...

  4. 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南

    安装 Oracle 安装 Oracle11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produc ...

  5. 微信小程序之滑动日历展示

    滑动日历效果 效果预览 实现要求:顶部固定悬浮的是获取未来一周的日期,分为上下两部分,上面部分显示星期,下面则显示具体日期.今天则显示今天,可点击头部具体日期,可向左向右滑动. 实现代码 顶部日历 页 ...

  6. Redux的中间件原理分析

    redux的中间件对于使用过redux的各位都不会感到陌生,通过应用上我们需要的所有要应用在redux流程上的中间件,我们可以加强dispatch的功能.最近也有一些初学者同时和实习生在询问中间件有关 ...

  7. 强化学习(十三) 策略梯度(Policy Gradient)

    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...

  8. Webpack系列-第一篇基础杂记

    前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然只是一个工具,但内部涉及到非常多的知识,之前一直靠CV来解决问题,之知其然不知其所以然,希望这次能整理一下相关的知识点. ...

  9. 简单导出下载excel的方法

    简单导出excel方法 /// <summary> /// Excel打包下载 /// </summary> /// <returns></returns&g ...

  10. swagger Failed to load Api definition 的问题

    这个问题是由于Tomcat乱码问题导致的,修改server.xml文件的编码格式修改成UTF-8