Access ClickOnce deployment properties for .NET on Windows
Starting in .NET 7 and Visual Studio 2022 version 17.4, you can access ClickOnce deployment properties by using an environment variable.
The application launcher shares ClickOnce application deployment properties with the application being launched (.NET only). Properties are shared with the application by using environment variables.
The variable names closely match the properties in the .NET Framework ApplicationDeployment class. The new variable names include a ClickOnce_
prefix:
- ClickOnce_IsNetworkDeployed
- ClickOnce_ActivationUri
- ClickOnce_CurrentVersion
- ClickOnce_DataDirectory
- ClickOnce_IsFirstRun
- ClickOnce_TimeOfLastUpdateCheck
- ClickOnce_UpdatedApplicationFullName
- ClickOnce_UpdatedVersion
- ClickOnce_UpdateLocation
In addition to these changes, a new property is available that returns the application launcher version:
ClickOnce_LauncherVersion
A .NET application can use these properties directly or indirectly.
Note
Using this method, you can access application deployment properties, but .NET 7 does not support the equivalent of ApplicationDeployment methods.
Access properties
The following code example shows how to access two properties directly, ClickOnce_IsNetworkDeployed
and 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();
}
}
Indirect usage of these properties requires the implementation of a new ApplicationDeployment
class at the application level. This class abstracts the reading of environment variables and provides a similar experience to the old .NET Framework class.
For a sample implementation of this class, see ApplicationDeployment.cs.
The following code snippet shows how to use this class:
NameValueCollection nameValueTable = new NameValueCollection();
if (ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
if (ad.ActivationUri != null)
{
nameValueTable = HttpUtility.ParseQueryString(ad.ActivationUri.Query);
}
}
ActivationUri and URL parameters
Starting in .NET 7, dotnet-mage supports a new switch, -TrustURLParameters
or -tu
. This switch allows you to set the required deployment attribute by using the dotnet-mage tool. This change is an improvement over the old Mage tool, which didn't support this functionality and also required manual modification of the application manifest to add the trustURLParameters
attribute, <deployment install="true" trustURLParameters="true">.
You need to set trustURLParameters
to true to allow the application to access the ActivationUri
and URL parameters.