通过合并模块

时间:2017-01-04 14:27:53

标签: vb6 wix windows-installer

我们的一个应用程序是VB6应用程序,它需要Tabctl32.ocx。

所以我将“tabctl32.msm”(包含版本6.1.97.82)添加到基于每台机器的Wix。当我运行这台每台机器的MSI时,它安装了OCX,当我作为管理员登录并启动VB应用程序时,应用程序运行良好。

但是,如果任何具有标准用户权限的人首次登录并启动了此VB应用程序,则会触发MSI自我修复。一旦为该用户完成了自我修复,它就会起作用,并且不再为该用户触发自我修复。管理员用户没有进行这种自我修复。

当我使用Orca检查MSI时,在“ModuleDependency”表中,此tabctl32模块具有COMCAT msm和OLEAUT32 msm的依赖关系,我们也将它们与合并模块一起安装。

我不明白为什么管理员用户不会对标准用户进行自我修复?

有谁能解释这里发生了什么?

1 个答案:

答案 0 :(得分:3)

它可能与标准用户或管理员用户或OCX无关 - 它可能只是不同的用户。

如果MSI中有特定用户拥有的任何资源(例如个人文件夹或其他人中的面向用户的文件,或HKCU中的注册表项),则第一次安装将安装所有这些资源以进行安装用户。

如果其他用户登录并使用该应用程序(希望每台计算机都安装),则修复触发器(例如使用快捷方式)会注意到此特定用户缺少这些用户项并将安装它们。这应该只发生一次 - 对同一个用户重复进行修复然后更严重。

在任何情况下,应用程序事件日志都应该有一个MsiInstaller日志条目,其中包含有关产品和缺少组件的一些数据。

这也可能取决于VB6应用程序 - 它是旧的,没有清单,因此可能以奇怪的方式与UAC交互。例如,如果虚拟化其行为以使用系统文件夹的\ VirtualStore位置,则可能需要将选项卡控件重新安装到该虚拟化系统文件夹中。管理员用户不会遇到同样的问题。