调用 System.Diagnostics.Process.Start() 真的有问题吗?
Is calling System.Diagnostics.Process.Start() truly problematic?
在我准备将我的应用程序提交到 Microsoft Store 时获得的验证结果(我的应用程序“已通过警告”),我在“程序包健全性测试”部分下得到了这个“失败”:
包含此类调用的代码是:
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 评论中的 link,它说,“启动实用程序通常可以提供一种从操作系统获取信息、访问注册表或访问系统功能的便捷方式. 但是,您可以改用 UWP API 来完成这些类型的任务。"
如果这是解决方案,UWP API 是否有等同于 System.Diagnostics.Process.Start() 的方法?
更新 2
我按照答案中的步骤操作,但解决方案仍然无法编译,因为这行代码出错:
await Windows.System.Launcher.LaunchUriAsync(uri);
事实上,即使我注释掉有问题的行,项目也不会再编译,但不会给我任何关于如何解决问题的信息,只是这样:
我将包管理格式设置为 PackageReference,并安装了 Microsoft.Windows.SDK.Contracts 的 10.0.18362.2005 版本,但它抱怨需要包引用...?!?我尝试使用 Windows.System 添加;
并使用 Microsoft.Windows.SDK.Contracts;但两者都未被识别。
已为项目安装包,如您所见:
更新 3
关于“必须使用包参考”错误信息,我有三个问题围绕着我在这里看到的内容:
下面的措辞 Microsoft.Windows.SDK.Contracts 说我可以更新这个包的版本 - 我应该吗?
我在我的项目的引用中没有看到对 Microsoft.Windows.SDK.Contracts 的引用,尽管它已被安装。我是否需要添加一个 - 如果需要,从哪里添加?
我的参考文献中的上下文菜单使我能够“将 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.Click 工具->NuGet 包管理器-> 包管理器设置-> 将 默认包管理格式 更改为 PackageReference。如下:
2.InstallMicrosoft.Windows.SDK.Contracts
包,注意需要安装合适的版本。请检查下面的相应版本。 (安装详情:右击参考->管理NuGet包->浏览->搜索Microsoft.Windows.SDK.Contracts->安装)
10.0.19041.xxxx:Windows10,版本2004,版本20H2
选择这个
10.0.18362.xxxx:为 Windows 10,版本 1903 选择此项。
10.0.17763.xxxx:为Windows10,版本1809选择此项。
10.0.17134.xxxx:为 Windows 10,版本 1803 选择此项。
3.Run 项目
在我准备将我的应用程序提交到 Microsoft Store 时获得的验证结果(我的应用程序“已通过警告”),我在“程序包健全性测试”部分下得到了这个“失败”:
包含此类调用的代码是:
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 评论中的 link,它说,“启动实用程序通常可以提供一种从操作系统获取信息、访问注册表或访问系统功能的便捷方式. 但是,您可以改用 UWP API 来完成这些类型的任务。"
如果这是解决方案,UWP API 是否有等同于 System.Diagnostics.Process.Start() 的方法?
更新 2
我按照答案中的步骤操作,但解决方案仍然无法编译,因为这行代码出错:
await Windows.System.Launcher.LaunchUriAsync(uri);
事实上,即使我注释掉有问题的行,项目也不会再编译,但不会给我任何关于如何解决问题的信息,只是这样:
我将包管理格式设置为 PackageReference,并安装了 Microsoft.Windows.SDK.Contracts 的 10.0.18362.2005 版本,但它抱怨需要包引用...?!?我尝试使用 Windows.System 添加; 并使用 Microsoft.Windows.SDK.Contracts;但两者都未被识别。
已为项目安装包,如您所见:
更新 3
关于“必须使用包参考”错误信息,我有三个问题围绕着我在这里看到的内容:
下面的措辞 Microsoft.Windows.SDK.Contracts 说我可以更新这个包的版本 - 我应该吗?
我在我的项目的引用中没有看到对 Microsoft.Windows.SDK.Contracts 的引用,尽管它已被安装。我是否需要添加一个 - 如果需要,从哪里添加?
我的参考文献中的上下文菜单使我能够“将 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.Click 工具->NuGet 包管理器-> 包管理器设置-> 将 默认包管理格式 更改为 PackageReference。如下:
2.InstallMicrosoft.Windows.SDK.Contracts
包,注意需要安装合适的版本。请检查下面的相应版本。 (安装详情:右击参考->管理NuGet包->浏览->搜索Microsoft.Windows.SDK.Contracts->安装)
10.0.19041.xxxx:Windows10,版本2004,版本20H2
选择这个10.0.18362.xxxx:为 Windows 10,版本 1903 选择此项。
10.0.17763.xxxx:为Windows10,版本1809选择此项。
10.0.17134.xxxx:为 Windows 10,版本 1803 选择此项。
3.Run 项目