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

從 .NET 7 和 Visual Studio 2022 17.4 版開始,您可以使用環境變數來存取 ClickOnce 部署屬性。

應用程式啟動器會與正在啟動的應用程式共用 ClickOnce 應用程式部署屬性 (僅限 .NET)。 屬性會使用環境變數來與應用程式共用。

變數名稱與 .NET Framework ApplicationDeployment 類別中的屬性緊密相符。 新的變數名稱包含 ClickOnce_ 前置詞:

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

  • ClickOnce_LauncherVersion

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

注意

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

存取屬性

下列程式碼範例示範如何直接存取兩個屬性:ClickOnce_IsNetworkDeployedClickOnce_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">。

您必須將 trustURLParameters 設定為 true,以允許應用程式存取 ActivationUri 和 URL 參數。

Windows 上適用於 .NET 的 ClickOnce