Msiexec REINSTALL=ALL REINSTALLMODE=vamus 没有重新安装任何东西 [英] Msiexec REINSTALL=ALL REINSTALLMODE=vamus not reinstalling anything

查看:29
本文介绍了Msiexec REINSTALL=ALL REINSTALLMODE=vamus 没有重新安装任何东西的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我正在尝试升级我的应用程序,据我所知,以下内容应无条件地重新安装所有组件:msiexec/i myapp.msi REINSTALL=ALL REINSTALLMODE=vamus

Basically I'm trying to upgrade my application, and to my understanding the following should unconditionally reinstall all components: msiexec /i myapp.msi REINSTALL=ALL REINSTALLMODE=vamus

在详细日志中,我看到:MSI (s) (A0:60) [15:40:10:948]:组件:A;安装:本地;请求:空;操作:空

In the verbose log however I see: MSI (s) (A0:60) [15:40:10:948]: Component: A; Installed: Local; Request: Null; Action: Null

MSI (s) (A0:60) [15:40:10:948]:组件:B;安装:本地;请求:空;操作:空

MSI (s) (A0:60) [15:40:10:948]: Component: B; Installed: Local; Request: Null; Action: Null

MSI (s) (A0:60) [15:40:10:948]:组件:C;安装:本地;请求:空;操作:空

MSI (s) (A0:60) [15:40:10:948]: Component: C; Installed: Local; Request: Null; Action: Null

MSI (s) (A0:60) [15:40:10:948]:组件:D;安装:本地;请求:空;操作:空

MSI (s) (A0:60) [15:40:10:948]: Component: D; Installed: Local; Request: Null; Action: Null

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

Etc for every component. If I delete or rename a file from the destination folder it will properly install the new version, however if the file exists in the location it'll ignore it instead of replacing it with the copy in the current msi file.

有没有人知道可能出了什么问题?

Does anyone have any insight on what could be going wrong?

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

The installer was created in WiX. Product ID and UpgradeCode remain the same, while PackageID is set to * so a new one should be generated for each build, so that should be correct as far as I know

推荐答案

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

This is kinda tricky to get right, I had the same problem. To make update installation work the update package has to contain ALL of the components from the original package. This means that you can't delete a component ever. You can remove files from a component, even all of them, but you are not allowed to remove a component. Otherwise the update installation won't actually do anything when doing a patch or a minor update. The ComponentIDs are stored in the Windows registry and the Windows Installer Service uses them to check if a Component is installed on the system or not.

如果删除了组件怎么办?您可以尝试重新添加它们,但它们具有相同的包 ID,这是困难甚至不可能的部分.

What to do if you have deleted components? You could try to add them back, but they have the same package IDs, and this is the hard or even the impossible part.

如果它仍然不起作用,您必须选择新安装,并且必须自己弄清楚必须更新什么.

If it still doesn't work you have to opt for a new installation and have to figure it out yourself what has to be updated.

或者,您可以进行重大更新,先卸载再安装.Windows 安装程序不会以这种方式关心功能组件结构.

Alternatively you could do a major update which does a deinstallation followed by an installation. The Windows Installer does not care about the Feature-Componenent structure this way.

这篇关于Msiexec REINSTALL=ALL REINSTALLMODE=vamus 没有重新安装任何东西的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆