Aceder às propriedades de implementação do ClickOnce para .NET no Windows

A partir do .NET 7 e do Visual Studio 2022 versão 17.4, pode aceder às propriedades de implementação do ClickOnce usando uma variável de ambiente.

O lançador de aplicações partilha as propriedades de implementação da aplicação ClickOnce com a aplicação que está a ser lançada (apenas .NET). As propriedades são partilhadas com a aplicação utilizando variáveis de ambiente.

Os nomes das variáveis correspondem de perto às propriedades da classe .NET Framework<xref:System.Deployment.Application.ApplicationDeployment>. Os novos nomes das variáveis incluem um ClickOnce_ prefixo:

Para além destas alterações, está disponível uma nova propriedade que devolve a versão do launcher da aplicação:

  • ClickOnce_LauncherVersion

Uma aplicação .NET pode usar estas propriedades direta ou indiretamente.

Note

Usando este método, pode aceder às propriedades de implementação da aplicação, mas o .NET 7 não suporta o equivalente aos métodos ApplicationDeployment.

Propriedades de acesso

O exemplo de código seguinte mostra como aceder diretamente a duas propriedades, ClickOnce_IsNetworkDeployed e 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();
    }
}

A utilização indireta destas propriedades requer a implementação de uma nova ApplicationDeployment classe ao nível da aplicação. Esta classe abstrai a leitura de variáveis de ambiente e proporciona uma experiência semelhante à antiga classe .NET Framework.

Para uma implementação exemplar desta classe, veja ApplicationDeployment.cs.

O seguinte excerto de código mostra como usar esta classe:

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

ActivationUri e parâmetros do URL

A partir do .NET 7, dotnet-mage suporta um novo interruptor, -TrustURLParameters ou -tu. Esta opção permite-lhe definir o atributo de implementação necessário utilizando a ferramenta dotnet-mage. Esta alteração é uma melhoria em relação à antiga ferramenta Mage, que não suportava esta funcionalidade e também exigia a modificação manual do manifesto da aplicação para adicionar o trustURLParameters atributo, <deployment install="true" trustURLParameters="true".>

Tens de definir trustURLParameters como true para permitir que a aplicação aceda aos ActivationUri parâmetros e URL.

ClickOnce para .NET no Windows