具有不同部署标识但相同应用程序标识的多个 ClickOnce 安装

29

我们有几个相同程序集的部署,针对不同的环境有不同的配置文件。我们将它们打包成不同的ClickOnce部署,并使用不同的部署标识(Program_ENV1、Program_ENV2等)。

所有这些部署的应用程序标识都是Program.exe,因为我们使用了第三方组件,该组件要求使用它的可执行文件与编译时的名称相同。

当我们想在同一台机器上安装相同版本的多个实例(用于测试)时,在安装时会出现一个错误,提示已存在同一应用程序标识的内容。

我们不想为每个部署制作带有新版本号的单独构建(QA已审核X.X.X.45版本的程序集,而不是X.X.X.46版本)。

是否有其他解决此问题的方法?

5个回答

21
要运行ClickOnce应用程序的并发版本,您必须更改AssemblyName,并建议您在发布属性中还更改ProductName,以便您可以在开始菜单中区分它们。

4

我最终使用了-u -Update选项基于生产环境创建了一个新的QA部署。

以下是我测试和验证的步骤:

  1. 创建一个简单的WPF应用程序
  2. 将mage.exe复制到项目中,因为Visual Studio在构建时无法解析它
  3. 在项目的后期构建中添加以下文本

cd "$(TargetDir)"

"$(ProjectDir)mage.exe" -New Application -Name $(ProjectName) -p msil -TrustLevel FullTrust -Version 1.0.0.0 -FromDirectory . -ToFile ".\$(TargetFileName).manifest"

"$(ProjectDir)mage.exe" -New Deployment -Install false -Name $(ProjectName) -p msil -Version 1.0.0.0 -AppManifest ".\$(TargetFileName).manifest" -ToFile ".\$(TargetName).application"

"$(ProjectDir)mage.exe" -Update ".\$(TargetName).application" -Install false -Name $(ProjectName).QA -p msil -Version 1.0.0.0 -AppManifest ".\$(TargetFileName).manifest" -ToFile ".\$(TargetName).QA.application"

我需要通过cd "$(TargetDir)"更改到"$(TargetDir)",因为mage不会正确处理带有空格的路径和文件路径,当我给它用双引号括起来的路径时。为了解决这个问题,我将当前目录设置为构建文件所在的位置。

第二行创建清单文件

第三行创建生产部署文件。

第四行从生产部署文件创建QA部署文件。(注意:我正在向部署文件和应用程序名称中添加QA。)

第四行会创建第二个应用程序文件。当两个应用程序都运行时,它们将具有相同的二进制文件,但是ApplicationDeployment.UpdateLocation对于每个应用程序都是不同的。一个将具有文件名$(TargetName).application,另一个将具有文件名$(TargetName).QA.application。在我的代码中,我可以使用这个来确定运行的应用程序的“版本”(QA生产


我找到了与mage和目录路径有关的问题......它不喜欢尾随斜杠。这可以通过在末尾添加一个句点来解决,例如:它将使用"C:\Foo\Bar."工作,但不会使用"C:\Foo\Bar"。 - Hasani Blackwell
1
有什么想法可以让这个程序与签名的ClickOnce应用程序一起工作吗?我正在尝试完成它,但似乎并不容易... - Per Lundberg
@PerLundberg 你在2014年成功解决了这个问题吗?:) 我们遇到了一个签名应用程序的类似问题。 - undefined
1
@ViKeR81 抱歉,很难记得了。:D 自那时起,我也换了工作,所以无法访问我们一起使用的存储库。如果你无法解决问题,请尝试在 Stack Overflow 上提出一个新问题,我相信这里还有其他人会知道的。祝你好运。 - undefined

1

Karg,如果你使用MageUI,你可以更改ApplicationIdentity,并同时运行几个已发布的相同应用程序版本。


1

尝试使用MageUI。打开您的部署清单(具有 .application 扩展名的那个)。从左侧列表中选择“名称”并编辑“名称”文本框。然后选择“描述”并编辑“产品”字段。这样,您就可以在开始菜单和添加/删除程序中区分不同的安装。

保存更改,重新签名清单,然后您就可以开始了。


1
显示名称已经针对不同的环境部署进行了区分。问题在于它们具有相同的应用程序标识,而 ClickOnce 不允许它们在同一台计算机上并排安装。 - Karg
你实际尝试过我的解决方案吗?通过MageUI设置“Name”属性可以更改应用程序标识,并允许多个版本的应用程序并存。如果您的显示名称已经不同,则无需费心更改“Description”属性。 - codeConcussion
@codeConcussion,我按照你的步骤操作了。但是更新后的名称仍然没有显示在开始菜单和添加/删除程序中。有什么想法吗?谢谢。 - Sh Ale

-1

对于每个环境,请使用环境名称的后缀来保留不同的程序集名称和产品名称。此外,为每个环境创建一个GUID,并将其添加到AssemblyInfo.cs中,例如:

[assembly: GuidAttribute("FA380FBE-11B0-406E-88D3-AF40BE93F7D6")]

这样就可以从不同的 ClickOnce 站点运行相同的应用程序,每个站点都有与产品名称对应的快捷方式。

回答很有用,但并没有回答原问题:“所有应用程序的应用程序标识都是Program.exe,因为我们有一个第三方组件要求使用它的可执行文件与编译时使用的名称相同。” 因此,我会给它点个踩。 - Per Lundberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接