歡迎光臨
每天分享高質量文章

在 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

"Microsoft.NET.Sdk.WindowsDesktop"

>

WinExe
netcoreapp3.0
true

“System.Runtime.WindowsRuntime” Version=“4.3.0” />

“Windows”>
$(MSBuildProgramFiles32)\Windows Kits\10\UnionMetadata\10.0.17763.0\Windows.winmd
true
false

然後,重新載入我們的專案,這個時候就可以使用 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

已同步到看一看
贊(0)

分享創造快樂