Msiexec REINSTALL = ALL REINSTALLMODE = vamus不重新安装任何东西

时间:2009-02-12 21:49:40

标签: windows-installer

基本上我正在尝试升级我的应用程序,根据我的理解,以下应该无条件地重新安装所有组件: msiexec / i myapp.msi重新安装=所有重新安装模式= vamus

在详细日志中,我看到: MSI(A0:60)[15:40:10:948]:组件:A;已安装:本地;要求:无效;行动:空

MSI(A0:60)[15:40:10:948]:组件:B;已安装:本地;要求:无效;行动:空

MSI(A0:60)[15:40:10:948]:组件:C;已安装:本地;要求:无效;行动:空

MSI(A0:60)[15:40:10:948]:组件:D;已安装:本地;要求:无效;行动:空

每个组件的等等。如果我从目标文件夹中删除或重命名文件,它将正确安装新版本,但是如果该文件存在于该位置,它将忽略它而不是用当前msi文件中的副本替换它。

有没有人对可能出现的问题有任何见解?

编辑:安装程序是在WiX中创建的。产品ID和UpgradeCode保持不变,而PackageID设置为*,因此应为每个构建生成一个新的,所以这应该是正确的,据我所知

4 个答案:

答案 0 :(得分:2)

这样做有点棘手,我遇到了同样的问题。 要使更新安装正常工作,更新包必须包含原始包中的所有组件。 这意味着您无法永久删除组件。您可以从组件中删除文件,甚至包括所有文件,但不允许删除组件。 否则,在执行修补程序或次要更新时,更新安装实际上不会执行任何操作。 ComponentID存储在Windows注册表中,Windows Installer服务使用它们来检查系统上是否安装了组件。

如果您删除了组件该怎么办? 您可以尝试将它们添加回来,但它们具有相同的包ID,这是很难甚至是不可能的部分。

如果它仍然不起作用,你必须选择新的安装,并且必须自己弄清楚必须更新的内容。

或者,您可以执行主要更新,卸载后执行安装。 Windows Installer不关心Feature-Componenent结构。

答案 1 :(得分:1)

Windows安装程序将主动防止将二进制文件降级到难以完成的程度,即使使用“剪切力”也与REINSTALLMODE = amus一样。这是微软防止Windows早期存在的“DLL地狱”战略的一部分。在那些日子里,可以使用旧版本覆盖系统DLL文件,从而在左,右和任何地方分解。 Windows Installer具有多个保护层,可防止降级二进制文件。

如果你需要能够像你提到的那样降级文件,唯一真正有效的方法是使用主要升级。主要升级并不像卸载和重新安装相关产品那样真正升级。这使您可以避免使MSI次要升级正常工作所涉及的许多复杂性。

即使在降级方面有重大升级,也存在复杂性。您必须在InstallExecuteSequence的早期对现有产品的卸载进行排序,以便在Windows Installer在文件成本核算期间对系统进行过多分析之前将旧产品从系统中删除。此操作将系统状态与MSI中的文件进行比较,并确定需要(重新)安装的文件。如果版本逻辑指示MSI中的文件是降级,则最终结果可能是磁盘上的文件被删除,并且根本没有安装旧文件。可能需要使用自定义操作从磁盘中提前删除文件以使降级可靠,或者使用安装文件夹,其中目标目标文件夹的绝对路径在不同版本之间不同。这会欺骗MSI“文件成本计算”,看不到安装在同一个地方的文件:

%ProgramFiles%\ My Company \ My Product \ 1 %ProgramFiles%\ My Company \ My Product \ 1.1

我不喜欢这个“移动目标”安装文件夹 - 在我看来,这不是MSI文件应该安装的方式,但它可以解决您的问题。

答案 2 :(得分:0)

您是否更新了版本号并配置了升级?

答案 3 :(得分:0)

我遇到了同样的问题。

对我有用的是完全删除REINSTALL = ALL REINSTALLMODE = vamus

我认为主要问题是REINSTALL模式下的v选项,根据下面链接中的文档,"不要使用v重新安装选项代码来首次安装应用程序或功能&#34 ;,我正在旧版本上安装我的产品的新版本。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371182(v=vs.85).aspx