我有一个特殊的愿望,在一台机器上安装一个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:
如果这是一个内部应用程序 ,您可以与开发团队进行对话,则可行的解决scheme是构build第二个开发人员MSI,将预发布版本与生产版本并排安装。 这些MSI文件将需要被创作以能够以文明的方式共存。 这实际上是非常重要的 – 涉及诸如不争夺相同的文件关联,不从不同的位置注册系统范围的COM组件,不覆盖彼此的registry项,不使用相同的快捷方式,不覆盖彼此的设置文件文本,xml,ini等)。 有很多挑战。
最后,我们通常select的方法,我们可以让MSI根据传递给它的参数安装一个不同的configuration。 所以你可以有一个名为CUSTOM_ENVIRONMENT =“DEV”的属性来安装应用程序的testing实例。 这种方法依赖于一个单一的MSI能够以不同的方式进行安装 – 但是,因此看起来并不符合你的要求。
所以总结(按照我的主观偏好):
不可能两次安装完全相同的MSI。 您可能能够打开MSI并更改GUID以使其再次安装。 要知道,这种方式有龙。 除非你非常幸运或者安装/产品非常简单,否则我几乎可以保证你的第二个安装不但不能正常工作,而且很可能你也会破坏第一个安装。 我强烈build议您解决任何问题,使您认为有必要使用一个盒子。
如果你改变它将删除“这个产品已经安装”的消息,并让你安装的东西,停止你安装两次是ProductCode Guid。 这是一个实例转换正在做的事情,但你可以通过在Orca中打开它并更改属性表中的产品代码来做同样的事情。
很明显,即使你做了两次安装,你也要确保你不会覆盖同一个地方。