存取 Windows 上 .NET 的 ClickOnce 部署屬性

從 .NET 7 和 Visual Studio 2022 版本 17.4 開始,你可以透過環境變數存取 ClickOnce 的部署屬性。

應用程式啟動器會與被啟動的應用程式共享 ClickOnce 應用程式部署屬性(僅限 .NET)。 屬性透過環境變數與應用程式共享。

變數名稱與 .NET Framework ApplicationDeployment 類別中的屬性非常吻合。 新的變數名稱包含一個 ClickOnce_ 前綴:

除了這些變更外,還新增了一個屬性,可以回傳應用程式啟動器的版本:

  • ClickOnce_LauncherVersion

.NET 應用程式可以直接或間接使用這些屬性。

注意

使用此方法,您可以存取應用程式部署屬性,但 .NET 7 不支援 ApplicationDeployment 方法的等效功能。

進入屬性

以下程式碼範例示範如何直接存取兩個屬性:ClickOnce_IsNetworkDeployed 和 ClickOnce_ActivationUri。

NameValueCollection nameValueTable = new NameValueCollection();
if (Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower() == "true")
{
    string value = Environment.GetEnvironmentVariable("ClickOnce_ActivationUri");
    Uri activationUri = string.IsNullOrEmpty(value) ? null : new Uri(value);
    if (activationUri != null)
    {
        nameValueTable = HttpUtility.ParseQueryString(activationUri.Query);
        Console.WriteLine("Query string: " + activationUri.Query);
        Console.ReadKey();
    }
}

間接使用這些屬性需要在應用程式層級實作一個新的 ApplicationDeployment 類別。 此類別抽象化環境變數的讀取,並提供與舊版 .NET Framework 類別相似的體驗。

此類別的範例實作請參見 ApplicationDeployment.cs。

以下程式碼片段展示了如何使用這個類別:

NameValueCollection nameValueTable = new NameValueCollection();
if (ApplicationDeployment.IsNetworkDeployed)
{
    ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
    if (ad.ActivationUri != null)
    {
        nameValueTable = HttpUtility.ParseQueryString(ad.ActivationUri.Query);
    }
}

ActivationUri 與 URL 參數

從 .NET 7 開始,dotnet-mage 支援新的交換器,-TrustURLParameters或 -tu。 這個開關讓你可以透過 dotnet-mage 工具設定所需的部署屬性。 此變更比舊版 Mage 工具有所改進,因為舊版不支援此功能,且還需要手動修改應用程式資訊清單,加入 trustURLParameters 屬性:<deployment install="true" trustURLParameters="true">。

你需要把 true 設定 trustURLParameters 成 true,讓應用程式能存取 ActivationUri 和 URL 參數。

Windows上的 ClickOnce for .NET