Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb6 通过合并模块安装Tabctl32时,为非管理员用户触发MSI自修复_Vb6_Wix_Windows Installer - Fatal编程技术网

Vb6 通过合并模块安装Tabctl32时,为非管理员用户触发MSI自修复

Vb6 通过合并模块安装Tabctl32时,为非管理员用户触发MSI自修复,vb6,wix,windows-installer,Vb6,Wix,Windows Installer,我们的应用程序之一是VB6应用程序,它需要Tabctl32.ocx 因此,我在基于每台机器的Wix中添加了“tabctl32.msm”(在版本6.1.97.82中包含它)。当我以管理员身份登录并启动VB应用程序时,它安装了OCX,应用程序运行良好 但是,如果任何具有标准用户权限的人首次登录并启动此VB应用程序,则会触发MSI自我修复。一旦该用户的自修复完成,它就会工作,不再触发该用户的自修复。管理员用户没有进行此自我修复 当我用Orca检查MSI时,在“ModuleDependence”表中,这

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

因此,我在基于每台机器的Wix中添加了“tabctl32.msm”(在版本6.1.97.82中包含它)。当我以管理员身份登录并启动VB应用程序时,它安装了OCX,应用程序运行良好

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

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

我不明白为什么自修复不会发生在管理员用户身上,而是发生在标准用户身上


有人能解释一下这里发生了什么吗?

这可能与标准用户、管理员用户或OCX无关,可能只是不同的用户

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

如果其他用户登录并使用该应用程序(希望是每台机器安装的),则修复触发器(例如使用快捷方式)将注意到该特定用户缺少这些用户项,并将安装它们。这种情况应该只发生一次——如果修复重复发生在同一个用户身上,那么就更严重了

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


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

你很接近。事实上,事件查看器有两个条目:检测产品“{A958E33B-5EC8-45C7-B1E0-661D0D7AD318}”、功能“ThisFeature”、组件“{1CD444446-251F-40CC-B158-717060F8A3B6}”失败。资源“HKEY\U当前\U用户(64)\Software\Company\InstalledMyAppShortcuts”不存在。在请求组件{FC3E0B6A-F62B-11D1-B144-00C04F990B2B}期间,检测产品{A958E33B-5EC8-45C7-B1E0-661D0D7AD318}功能“ThisFeature”失败,但任何用户都不存在快捷注册表键,因为它是HKCU特定的。而“{FC3E0B6A-F62B-11D1-B144-00C04F990B2B}”是Tabctl32.ocx的GUID。如果我将Tabctl32.ocx作为松散文件而不是合并模块安装,则不会发生自修复。这意味着,我确信快捷方式不是罪魁祸首。不确定这意味着什么:“快捷方式注册表键对于任何用户都不存在,因为它是HKCU特定的”,因为每台机器安装将为安装用户安装它,而不是为其他用户安装。您的帖子中没有足够的关于关键文件/注册表项的信息,也没有足够的关于功能中包含哪些组件的信息,因为整个包含功能都被修复了,而不仅仅是组件。@Petronius:VB6部署总是有问题,并且经常出现奇怪的问题。这看起来很像COM控件所需的每用户数据。还有其他几个常见的VB6部署问题,我可能会用VB6部分更新链接文章。