调用 System.Diagnostics.Process.Start() 真的有问题吗?

问题描述

在准备将我的应用程序提交到 Microsoft Store 时获得的验证结果中(我的应用程序“通过警告”),我在“包健全性测试”部分下得到了这个“失败”:

enter image description here

包含这样一个调用代码是:

private void mymapsHelpToolStripMenuItem_Click(object sender,EventArgs e)
{
    System.Diagnostics.Process.Start("https://ramblingnotesofageezer.substack.com/p/map-o-matic-overview");
}

我正在使用该代码,因为这里建议这样做。 How do I start a process from C#?

这真的是个问题吗?如果是这样,我应该使用什么来代替对 System.Diagnostics.Process.Start() 的调用

我觉得奇怪的是它被归类为测试的失败部分,但总体结果是我的应用通过了(尽管有警告)。

更新

我查看了 Codexer 评论中的链接,其中说:“启动实用程序通常可以提供一种便捷的方式来从操作系统获取信息、访问注册表或访问系统功能。但是,您可以使用而是使用 UWP API 来完成这些类型的任务。”

如果这是解决方案,UWP API 是否与 System.Diagnostics.Process.Start() 等效?

更新 2

我按照答案中的步骤操作,但由于这行代码出错,解决方案仍然无法编译:

await Windows.System.Launcher.LaunchUriAsync(uri);

enter image description here

事实上,即使我注释掉有问题的行,项目也将不再编译,但没有给我任何有关如何解决问题的信息,仅此:

enter image description here

我将包管理格式设置为 packagereference,并安装了 Microsoft.Windows.SDK.Contracts 的 10.0.18362.2005 版本,但它抱怨需要包引用......?!?我尝试使用 Windows.System 添加; 并使用 Microsoft.Windows.SDK.Contracts;但两者都未被识别。

为项目安装了包,如下所示:

enter image description here

更新 3

关于“必须使用包参考”错误消息,围绕我在这里看到的内容我有三个问题:

enter image description here

Microsoft.Windows.SDK.Contracts 下面的文字说我可以更新这个包的版本 - 我应该吗?

我在我的项目的参考中没有看到对 Microsoft.Windows.SDK.Contracts 的参考,尽管它已经安装。我是否需要添加一个 - 如果是,从哪里添加

我的 References 上的上下文菜单使我能够“将 packages.config 迁移到 packagereference...”,我应该这样做吗?

解决方法

如果你正在开发一个uwp应用,为了打开一个web uri,建议改用Launcher.LaunchUriAsync(Uri)方法,这个方法会启动默认浏览器打开指定的URI。

例如:

private async void button_Click(object sender,RoutedEventArgs e)
        {           
            Uri uri = new Uri("http://www.google.com");
            await Windows.System.Launcher.LaunchUriAsync(uri);
        }

更新:

正如 Codexer 提到的,您可以参考 this document 在 winform 应用程序中使用 uwp api。

我创建了一个winform项目,它的目标框架是.Net Framework4.8。对于 .NET 的早期版本(.NET Core 3.x、.NET 5 Preview 7(或更早版本)或 .NET Framework),您可以参考我的步骤。

1.单击工具->NuGet 包管理器-> 包管理器设置-> 更改默认包管理格式 strong> 到 PackageReference。如下:

enter image description here

2.安装Microsoft.Windows.SDK.Contracts包,注意需要安装合适的版本。请检查下面的相应版本。 (安装详细信息:右键单击参考-> 管理 NuGet 包->浏览->搜索 Microsoft.Windows.SDK.Contracts->安装)

  • 10.0.19041.xxxx:为 Windows 10,版本 2004,版本 20H2 选择此项

  • 10.0.18362.xxxx:为 Windows 10 版本 1903 选择此项。

  • 10.0.17763.xxxx:为 Windows 10 版本 1809 选择此项。

  • 10.0.17134.xxxx:为 Windows 10 版本 1803 选择此项。

enter image description here

3.运行项目

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...