在 Windows 上访问 .NET 的 ClickOnce 部署属性

从 .NET 7 和 Visual Studio 2022 版本 17.4 开始,可以使用环境变量访问 ClickOnce 部署属性。

应用程序启动器与启动的应用程序(仅限 .NET)共享 ClickOnce 应用程序部署属性。 属性是通过使用环境变量与应用程序共享的。

变量名称与 .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