【问题标题】:Can I obtain the ClickOnce published Product Name from inside the application?我可以从应用程序内部获取 ClickOnce 发布的产品名称吗?
【发布时间】:2011-05-07 01:35:01
【问题描述】:

我有一个不同于程序集名称的 ClickOnce 发布名称。出于讨论目的,它是“App 6.0”。我在我的项目的属性中设置它。有没有办法从程序内部获取这个值?

【问题讨论】:

    标签: c# installation clickonce


    【解决方案1】:

    添加对Microsoft.Build.Tasks.v4.0.dll 的引用,然后运行:

    if (null != AppDomain.CurrentDomain.ActivationContext)
    {
        DeployManifest manifest;
        using (MemoryStream stream = new MemoryStream(AppDomain.CurrentDomain.ActivationContext.DeploymentManifestBytes))
        {
            manifest = (DeployManifest)ManifestReader.ReadManifest("Deployment", stream, true);
        }
        // manifest.Product has the name you want
    }
    else
    {
       // not deployed
    }
    

    DeployManifest 还可以提供清单中的其他有用信息,例如 Publisher 或 SupportUrl。

    【讨论】:

    • 版本要求是什么,如果有的话,它可以工作(例如,对于 .NET Framework 和/或 Visual Studio)?
    【解决方案2】:

    答案可以在ClickOnce Run at Startup中找到。本质上,您使用 InPlaceHostingManager 获取 ClickOnce 清单并阅读它。它让我觉得它是一种异步方法,但这是迄今为止唯一有效的方法。非常感谢简化。有关 DeploymentDescription 的说明,请参见网页。

    var inPlaceHostingManager = new InPlaceHostingManager(ApplicationDeployment.CurrentDeployment.UpdateLocation, false);
    inPlaceHostingManager.GetManifestCompleted += ((sender, e) =>
    {
        try
        {
            var deploymentDescription = new DeploymentDescription(e.DeploymentManifest);
            string productName = deploymentDescription.Product;
            ***DoSomethingToYour(productName);***
    
            // - use this later -
            //var commandBuilder = new StartMenuCommandBuilder(deploymentDescription);
            //string startMenuCommand = commandBuilder.Command;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
        }
    });
    

    【讨论】:

    • InPlaceHostingManager 位于System.Deployment.dllDeploymentDescription 在哪里?
    • @DaviFiamenghi 您正在寻找的课程在链接帖子的评论中。我已经编辑了答案以包含它,等待审核。如果您点击链接并搜索该课程的页面,您会找到它。
    【解决方案3】:

    ApplicationDeployment.UpdatedApplicationFullName 属性

    【讨论】:

    • 这并不能给出正确的答案。我正在寻找在 Clickonce 发布选项中输入的 ProductName。我找到了一个使用清单的解决方案,但它不是最优雅的。
    猜你喜欢
    • 2010-10-12
    • 2019-12-26
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2012-09-16
    相关资源
    最近更新 更多