我正在编写一个库(c# .net 4.0)以供在许多应用程序中使用。要求之一是库返回的结果略有不同,具体取决于应用程序是否通过 clickonce 部署和运行。
我进行了搜索,但找不到任何方法可以让程序集确定“托管”应用程序在部署后是否单击。
如有任何指点,我们将不胜感激。
添加对
System.Deployment
的引用,之后你可以使用:
Application.ApplicationDeployment.IsNetworkDeployed
如果您需要将参数传递给应用程序,请使用:
var args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
我认为您可能需要 CurrentDeployment。请注意,根据文档,如果您从不是 clickonce 的应用程序调用此函数,则会抛出异常。
对于较新的 .net 版本,可以在此处找到文档。
从 .NET 7 和 Visual Studio 2022 版本 17.4 开始,您可以访问 使用环境变量的 ClickOnce 部署属性。
来自 Microsoft 文档的示例:
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();
}
}