确定应用程序是否作为“clickonce”应用程序运行

问题描述 投票:0回答:3

我正在编写一个库(c# .net 4.0)以供在许多应用程序中使用。要求之一是库返回的结果略有不同,具体取决于应用程序是否通过 clickonce 部署和运行。

我进行了搜索,但找不到任何方法可以让程序集确定“托管”应用程序在部署后是否单击。

如有任何指点,我们将不胜感激。

c# clickonce
3个回答
12
投票

添加对

System.Deployment
的引用,之后你可以使用:

Application.ApplicationDeployment.IsNetworkDeployed

如果您需要将参数传递给应用程序,请使用:

var args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;

0
投票

我认为您可能需要 CurrentDeployment。请注意,根据文档,如果您从不是 clickonce 的应用程序调用此函数,则会抛出异常。


0
投票

对于较新的 .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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.