我想要安装一个MSI两次

我有一个特殊的愿望,在一台机器上安装一个msi两次。 双重安装的目的是首先安装在预生产文件夹下,在部署到生产文件夹之前在安全的环境中运行部署。

我们通常使用单独的机器来表示这些不同的环境,但在这种情况下,我需要使用相同的盒子。

我得到的两个场景如下:

  • 我已经安装了预生产,我很高兴,我想安装生产,我运行msi,它询问我是否要修复或删除安装
  • 我已经安装了产品,我想安装新版本的msi,它告诉我我已经安装了一个产品版本,我必须先卸载当前版本

第一种情况并不是太糟糕,因为我们现在可以在生产文件夹下理智地卸载并重新安装,但第二种情况是一个痛苦,因为我们不想卸载实时生产部署。

有没有我可以给msiexec,这将允许这样的设置?

有没有更适合我可以使用的不同方法?

看看Scott Willeke的LessMsiérables(LessMSI)能为你做些什么…

http://lessmsi.activescott.com/

使用它来提取和更改MSI的GUID和/或内容,重新包装和执行“安装两次”的需要。

虚拟化,认真

Windows安装程序有一个内置的function,应该允许你想要做的:“ 实例转换 ”,但尽pipe我所有的MSI经验,我没有用太多。 它允许您通过MSINEWINSTANCE属性多次安装同一产品,并在命令行中设置一个转换。

如果这是第三方应用程序 ,我将采用已经推荐的虚拟化方法 。 您应该知道,您可以使用Microsoft App-V虚拟软件包对虚拟化软件包进行虚拟化,也可以只使用常规VMWare虚拟PC实现(虚拟PC而不是虚拟软件包)。

与普通应用程序相比, Microsoft App-V虚拟软件包和新的虚拟化技术可以实现一些新function:

  • 应用程序stream – 机器上没有本地安装 – JIT
  • 在同一台计算机上使用两个不兼容的软件
  • 通过服务器更新
  • 控制许可 – 最多同时使用的用户或将软件绑定到组/用户。
  • 快速,方便地向用户提供应用程序
  • 这里有更多微软营销 。

如果这是一个内部应用程序 ,您可以与开发团队进行对话,则可行的解决scheme是构build第二个开发人员MSI,将预发布版本与生产版本并排安装。 这些MSI文件将需要被创作以能够以文明的方式共存。 这实际上是非常重要的 – 涉及诸如不争夺相同的文件关联,不从不同的位置注册系统范围的COM组件,不覆盖彼此的registry项,不使用相同的快捷方式,不覆盖彼此的设置文件文本,xml,ini等)。 有很多挑战。

最后,我们通常select的方法,我们可以让MSI根据传递给它的参数安装一个不同的configuration。 所以你可以有一个名为CUSTOM_ENVIRONMENT =“DEV”的属性来安装应用程序的testing实例。 这种方法依赖于一个单一的MSI能够以不同的方式进行安装 – 但是,因此看起来并不符合你的要求。

所以总结(按照我的主观偏好):

  1. 虚拟化 – 我喜欢这样的事实消除了整个问题。
  2. 并行安装 :(多个MSI的PROD / DEV / UAT能够并行共存( 仅适用于内部应用程序
  3. 实例转换? (正如我所说,没有使用它 – 但这是它应该帮助的)
  4. 环境感知MSI (单个MSI能够安装为PROD / DEV / UAT)( 仅适用于内部应用程序

不可能两次安装完全相同的MSI。 您可能能够打开MSI并更改GUID以使其再次安装。 要知道,这种方式有龙。 除非你非常幸运或者安装/产品非常简单,否则我几乎可以保证你的第二个安装不但不能正常工作,而且很可能你也会破坏第一个安装。 我强烈build议您解决任何问题,使您认为有必要使用一个盒子。

如果你改变它将删除“这个产品已经安装”的消息,并让你安装的东西,停止你安装两次是ProductCode Guid。 这是一个实例转换正在做的事情,但你可以通过在Orca中打开它并更改属性表中的产品代码来做同样的事情。

很明显,即使你做了两次安装,你也要确保你不会覆盖同一个地方。