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

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

问题描述

在传统的基于 .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/"));

相关参考

原文地址:https://www.cnblogs.com/lonelyxmas/p/10747727.html

时间: 2024-08-13 16:25:59

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

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

程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

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

最近在开发基本Modbus协议的Android端PLC控制程序,C#版程序没有任何问题,移到JAVA下出现各种问题,其中比较苦恼的是java.net.SocketException: recvfrom failed: ECONNRESET错误. 开始我的解决方法是每次向PLC发送一条数据后关掉socket,但是这样做太极端了. 经过分析发现是由于发送的数据包大小我设定为256,当写入1个寄存器值时,Modbus服务端直接报错,关掉了socket连接,将发送的数据包大小改成实际的大小后解决问题.

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

实现上传文件功能,有时上传也会操作出错,能让用户有改正有机会,开发上传文件能有更新的功能. 文件上传时,如果是存储于应用程序某一目录的话,在更新时需要了解一些流程,先是删除旧文件,更新数据表相关信息,存储新文件. 本篇让你了解到MVC与jQuery的交互处理. 在数据库中,新建一个更新的存储过程: 找到并打开FileLibraryEntity.cs,添加一个vlid更新方法: 在ExerciseController.cs控制器中,创建一个更新Action: A标记,删除旧文件. B标记,获取新上

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

程序中保存状态的方式有以下几种: 1.Application 2.Cookie 3.Session 4.ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hidden字段,但是它是服务器控件状态保存的基础如下代码 1 <form method="post" action="./pay.aspx" id="form1"> 2 <div class="aspNetHidden&quo

stm32工程建立中关于宏定义和启动文件的选择

在STM32的学习过程中,第一步关于stm32工程的建立就会难倒很多人,因为他不像其他AVR 51单片机这些,options中的配置比较复杂,其中最让人头疼的就是关于c/c++ compiler选项中preprocessor这个选择框,现在我就对其中的两项进行说明,一是为了让以后学习STM32的同学能更快的了解,二是为了让我自己更好的复习. 如上图所示  其中 additional include directories下面的框需要添加工程内头文件所在的路径,'$PROJ_DIR$'表示的是工程

分析Linux 0.11中的kernel部分的makefile文件

## 在UltraEdit下注释# # ## if you want the ram-disk device, define this to be the# size in blocks.#RAMDISK = #-DRAMDISK=512 ##8086汇编编译器和连接器. -0生成8086目标程序;-a生成与gas和gld部分兼容的代码???zzz#AS86 =as86 -0 -a LD86 =ld86 -0 ##GNU汇编编译器和连接器#AS =gas   LD =gld ##GNU连接器gl

企业网络中利用FTP协议来实现文件的上传和下载

FTP技术的概念 文件传输协议,FTP是用来传送文件的协议.使用FTP实现远程文件传输的同时,还可以保证数据传输的可靠性和高效性 FTP协议的作用:可以在服务器上面下载文件 或者在本地上传文件到服务器里面 FTP的控制层面和数据层面 客户端(client)和服务器(server):简称为C/S模式 控制平面和转发平面(数据平面) 控制平面:主要保证服务器和客户端之间通信,使用的是TCP的21号端口 客户端----->>>>>服务器进行连接 TCP 源端口 随机 目标端口 21

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

前言 因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C++ MFC中调用那些WebService中写好的函数,中间也是遇到了一些不懂和不解的地方,好在通过度娘上的一些资料和自己的研究逐一的解决了,写这篇文章的主要目的是,第一:让自己记得更清楚,也方便以后不记得了可以及时回想起来.第二:让其他的一些和我碰到一样问题的朋友能更好的解决此问题.内容仅供参考,如

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

之前学习了微信小程序前端,使用到LeanCloud线上数据库 [传送门].作为一个前端开发人员,了解后端及数据库是学习工作的需要. LeanCloud直接登录,未注册直接创建账户.它是一款免费的线上数据库(开发版免费).适用于一些想自己写微信小程序前端但不太会后端的开发者学习用.本篇文章涉及数据存储服务(增删查改). 首先,下载一个JavaScript-sdk :av-weapp-min.js[下载链接],它是在微信小程序中使用此数据库的关键文件.下载之后,保存至项目路径,这里以'/libs/a