mad*_*ger 5 com wix uninstall registration
我对WiX比较陌生.这是一个很棒的工具,但我仍然需要一些时间来更好地学习它.我遇到了注册和取消注册COM组件的问题.我已经为两个应用程序创建了安装程序,我们可以将它们称为A和B.两者都使用相同的COM组件.我按照建议使用了加热工具.安装A或B时,组件注册没有任何问题.
但是当我安装A和B,然后删除A(使用添加/删除程序)COM类未注册,B不能再使用它.有没有一个干净的解决方案来防止这种情况发生?我想在卸载A和B时取消注册COM.
任何帮助,将不胜感激,
最好的问候,madbadger
编辑:谢谢你的回复.我在两个安装程序中将GUID设置为相同的值,现在正在正确删除注册表项,即从系统中删除最后一个程序.
Hovewer,问题仍然存在,原因之一.我在HKEY_CLASSES_ROOT/CLSID/[相应的COM GUID]下检查了注册表.这是发生的事情:
- 我安装A并将COM的路径设置为[A/component.dll的路径]
- 我安装B并将COM路径设置为[路径到B/component.dll]
- 我删除B和COM的路径仍然是[B/component.dll的路径]
- 现在A无法通过注册来访问COM组件,因为[B/component.dll的路径]不再存在
现在我假设将COM组件放在两个应用程序的同一目录中是必须的.Windows Installer无法恢复到旧路径,还是我缺少的东西?
Windows 安装程序将为您执行此操作,但前提是您的 COM 组件在 A 和 B 上具有相同的 GUID (并且两个应用程序将 dll 安装在同一位置)。
Windows 安装程序通过对每个组件(整个系统)进行引用计数来工作。组件通过其 GUID 进行标识。
如果 COM 组件具有相同的 GUID,则会发生以下情况:
如果它没有相同的 GUID,会发生什么
编辑从评论中提升:
除了 GUID 之外,每个组件还有一个“关键路径”。如果组件包含一个或多个文件,则应使用KeyPath="foo.dll". 如果该组件包含一个或多个注册表项,则情况类似。
当检查是否安装了某些东西时,Windows安装程序将检查GUID,读取关键路径,然后检查关键路径处的文件(这就是它如何确定东西是什么版本等),所以如果2个组件有相同的 GUID,它们还必须具有相同的密钥路径,该路径必须在安装产品时解析到文件系统中的相同位置。
这是一种冗长的说法,表示两个安装程序必须将共享文件放在同一位置。至于把它们放在哪里,System32 不是一个好地方。
我建议在公共文件文件夹下的某个地方(通常Program Files\Common Files\YourCompanyName)。你可以像这样在 Wix 中输入:Directory="[CommonFilesFolder]\YourCompanyName"
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |