问题描述

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

Copy

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

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

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

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

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

解决方法

方法一

手动创建 ProcessStartInfo 对象,并设置 UseShellExecute=True,示例代码如下所示:

Copy

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,修改如下所示:

Copy

<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 了。比如,我们可以使用如下方式调用默认浏览器打开目标网址:

Copy

await Launcher.LaunchUriAsync(new Uri("https://hippiezhou.fun/"));

相关参考

  • C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?

  • Windows.System.Launcher

  • How to launch another app using protocol on .NET Core 3.0 WPF app

原文地址:https://www.cnblogs.com/hippieZhou/p/10683191.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

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

  1. DotNetCore Web应用程序中的Session管理

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...

  2. DotNetCore Web应用程序中的Cookie管理

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...

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

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

  4. activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置...

    activex 控件的id 定义位置 // SuperDisplayCtl.cpp IMPLEMENT_OLECREATE_EX(CSuperDisplayCtrl, "SuperDispl ...

  5. Redux简介以及Redux应用程序中的状态更新方式

    by Syeda Aimen Batool 通过Syeda Aimen Batool Redux简介以及Redux应用程序中的状态更新方式 (An intro to Redux and how sta ...

  6. 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试

    我们在windows10中对文件或文件夹进行删除.移动.重命名等操作时,系统可能提示"操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试.",遇到这种 ...

  7. 操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试解决方法

    今天卸载WPS后,想把安装的文件夹删除掉.提示"操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试" 查找何处占用最后发现有一个DLL文件被占用, ...

  8. Win10:添加或者删除开机启动项,在开机启动项中添加在用户自定义的启动文件

    介绍 主要解决问题 添加或者删除开机启动项(在不借助流氓软件的情况下通过自己的设置完成) 在开机启动项中添加在用户自定义的启动文件(开机启动项选项中没有存在的) 方案一 win+R,窗口中输入msco ...

  9. 在.net 2.0/3.0程序中使用扩展方法

    .NET Framework 从2.0升级至3.0/3.5中,增加了不少编译器级别的语法糖,如var关键字.自动属性.Lambda表达式.扩展方法等等. 如果使用vs2008发布.net2.0程序时, ...

最新文章

  1. python3常用模块_python常见模块有哪些
  2. 从XML文件读取数据绑定到列表控件2
  3. ora--12154 :TNS :could not resolve the connect identifier specified 错误处理
  4. java logout session_会话跟踪技术--session的使用
  5. 解决echart中:Cannot read property ‘queryComponents‘ of undefined
  6. oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等
  7. telnet后为啥打开的时防火墙_飞机起降时为啥要打开遮光板?机餐为啥总觉得不好吃?答案看这里...
  8. phpStorm提示Cannot save files解决 js___jb_tmp___
  9. 我的HEVC码流分析工具MFC小笔记:树形控件使用及窗口缩放
  10. 51单片机学习-开篇
  11. Clojure 学习入门(3)- 数字类型
  12. 阿里云盘内测_阿里云盘内测邀请码发放!30MB/s的下载速度
  13. 错把女生的耍脾气当拒绝
  14. 软件工程(吕云翔第二版)部分知识点
  15. java web聊天室私聊map_javaweb聊天小项目
  16. 系统架构演进路线及战术分析(微博、LinkedIn)
  17. shell 脚本实例--持续更新
  18. Jmockit使用详解之Mocking
  19. ue4 点击某一物体触发事件_UE4引擎——姜小白修炼记(三)
  20. Killer Names( 容斥定理,快速幂 )

热门文章

  1. 如何与Ubuntu One同步配置文件
  2. t30智能插座怎么设置_如何设置ConnectSense智能插座
  3. Windows获取CPU、内存和磁盘使用率脚本
  4. iOS 集合的深复制与浅复制
  5. OpenSSL--Window生成证书实战
  6. Blazor University (10)组件 — 捕获意外参数
  7. .NET Core中异常过滤器ExceptionFilter的使用介绍
  8. Kubernetes:全面了解 Deployment
  9. 生活在任务栏的猫, CPU使用率越高它就跑的越快
  10. 拥抱开源!除了微软红帽,这些国际大厂你认识几个?