MSI不修复某些注册表项

时间:2013-01-09 16:52:05

标签: com installer registry windows-installer

当我从命令行运行命令“msiexec / fm”时,我注意到某些HKLM注册表项未被修复。当我在C ++中执行此操作时,会发生同样的事情:“MsiReinstallProduct(ProductCode,REINSTALLMODE_REPAIR | REINSTALLMODE_MACHINEDATA);”

情况就是这样。我有一个必须注册的COM DLL。此DLL的CLSID信息位于MSI注册表中。在安装过程中,MSI会将信息放在注册表中。如果我手动删除CLSID密钥并执行修复“msiexec / fm”,则会正确还原注册表项。类似地,如果我手动更改注册表中指向DLL的路径,那么MSI会将字符串修复回原始值。

有一个工作流程不会修复密钥。如果我在计算机上删除新版本的DLL以替换安装附带的DLL,则MSI将不再修复CLSID密钥。就像MSI决定不应修复此密钥一样,因为DLL不相同。我需要一种强制MSI修复的方法来修复注册表项,即使DLL已经改变了。

命令“msiexec / fdm”实际上将修复注册表项,但它也会将文件更新回原始文件。在我的情况下,我有一个新文件,因为它已安装在Service Pack中。我希望保留新文件,只修复注册表项。

1 个答案:

答案 0 :(得分:2)

我的猜测是DLL文件是包含注册表项的组件中的关键成员。默认情况下,除非缺少密钥成员,否则不会重新安装组件。您应该指定几个标志以确保触发组件重新安装。例如。 / fpem

http://technet.microsoft.com/en-us/library/cc759262(v=ws.10).aspx#BKMK_Repair