Доступ к свойствам развертывания ClickOnce для .NET в Windows

Начиная с .NET 7 и Visual Studio 2022 версии 17.4, можно получить доступ к свойствам развертывания ClickOnce с помощью переменной среды.

Средство запуска приложений предоставляет общие свойства развертывания приложений ClickOnce с запущенным приложением (только для .NET). Свойства предоставляются приложению с помощью переменных среды.

Имена переменных тесно соответствуют свойствам в классе платформа .NET FrameworkApplicationDeployment. Новые имена переменных включают ClickOnce_ префикс:

Помимо этих изменений, доступно новое свойство, которое возвращает версию средства запуска приложений:

  • ClickOnce_LauncherVersion

Приложение .NET может использовать эти свойства напрямую или косвенно.

Примечание.

С помощью этого метода можно получить доступ к свойствам развертывания приложений, но .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

Свойства access

В следующем примере кода показано, 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".>

Необходимо задать trustURLParameters значение true, чтобы разрешить приложению доступ к ActivationUri параметрам и ПАРАМЕТРАМ URL-адреса.

ClickOnce для .NET в Windows