在 Windows 上访问 .NET 的 ClickOnce 部署属性
从 .NET 7 和 Visual Studio 2022 版本 17.4 开始,可以使用环境变量访问 ClickOnce 部署属性。
应用程序启动器与启动的应用程序(仅限 .NET)共享 ClickOnce 应用程序部署属性。 属性是通过使用环境变量与应用程序共享的。
变量名称与 .NET Framework ApplicationDeployment 类中的属性紧密匹配。 新的变量名称包含 ClickOnce_
前缀:
- ClickOnce_IsNetworkDeployed
- ClickOnce_ActivationUri
- ClickOnce_CurrentVersion
- ClickOnce_DataDirectory
- ClickOnce_IsFirstRun
- ClickOnce_TimeOfLastUpdateCheck
- ClickOnce_UpdatedApplicationFullName
- ClickOnce_UpdatedVersion
- ClickOnce_UpdateLocation
除了这些更改之外,还有一个新属性可用于返回应用程序启动器版本:
ClickOnce_LauncherVersion
.NET 应用程序可以直接或间接使用这些属性。
注意
使用此方法,可以访问应用程序部署属性;但是,.NET 7 不支持等效的 ApplicationDeployment 方法。
访问属性
下面的代码示例演示如何直接访问两个属性 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 参数。