在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
问题描述
在传统的基于 .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 程序中使用通用协议方式启动文件关联应用相关推荐
- DotNetCore Web应用程序中的Session管理
原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...
- DotNetCore Web应用程序中的Cookie管理
原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...
- 程序中保存状态的方式之Cookies
程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#&q ...
- activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置...
activex 控件的id 定义位置 // SuperDisplayCtl.cpp IMPLEMENT_OLECREATE_EX(CSuperDisplayCtrl, "SuperDispl ...
- Redux简介以及Redux应用程序中的状态更新方式
by Syeda Aimen Batool 通过Syeda Aimen Batool Redux简介以及Redux应用程序中的状态更新方式 (An intro to Redux and how sta ...
- 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试
我们在windows10中对文件或文件夹进行删除.移动.重命名等操作时,系统可能提示"操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试.",遇到这种 ...
- 操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试解决方法
今天卸载WPS后,想把安装的文件夹删除掉.提示"操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试" 查找何处占用最后发现有一个DLL文件被占用, ...
- Win10:添加或者删除开机启动项,在开机启动项中添加在用户自定义的启动文件
介绍 主要解决问题 添加或者删除开机启动项(在不借助流氓软件的情况下通过自己的设置完成) 在开机启动项中添加在用户自定义的启动文件(开机启动项选项中没有存在的) 方案一 win+R,窗口中输入msco ...
- 在.net 2.0/3.0程序中使用扩展方法
.NET Framework 从2.0升级至3.0/3.5中,增加了不少编译器级别的语法糖,如var关键字.自动属性.Lambda表达式.扩展方法等等. 如果使用vs2008发布.net2.0程序时, ...
最新文章
- python3常用模块_python常见模块有哪些
- 从XML文件读取数据绑定到列表控件2
- ora--12154 :TNS :could not resolve the connect identifier specified 错误处理
- java logout session_会话跟踪技术--session的使用
- 解决echart中:Cannot read property ‘queryComponents‘ of undefined
- oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等
- telnet后为啥打开的时防火墙_飞机起降时为啥要打开遮光板?机餐为啥总觉得不好吃?答案看这里...
- phpStorm提示Cannot save files解决 js___jb_tmp___
- 我的HEVC码流分析工具MFC小笔记:树形控件使用及窗口缩放
- 51单片机学习-开篇
- Clojure 学习入门(3)- 数字类型
- 阿里云盘内测_阿里云盘内测邀请码发放!30MB/s的下载速度
- 错把女生的耍脾气当拒绝
- 软件工程(吕云翔第二版)部分知识点
- java web聊天室私聊map_javaweb聊天小项目
- 系统架构演进路线及战术分析(微博、LinkedIn)
- shell 脚本实例--持续更新
- Jmockit使用详解之Mocking
- ue4 点击某一物体触发事件_UE4引擎——姜小白修炼记(三)
- Killer Names( 容斥定理,快速幂 )