我的MSI安装程序无法在XP上注册DLL。在Vista上,它不会注册,除非我是管理员。在Win7上,它将随机注册或不注册动态链接库。
在微星不注册动态链接库后,用户被迫进入安装文件夹,输入"regsvr32 mydllname.dll“-然后一切正常(这证明动态链接库是健康的和正常的)。
该文件的“注册”属性是MSI项目中的"selfReg“。"COM“也不起作用。
我开始认为要么是我产生了幻觉,要么是MSI根本无法注册DLL……非常沮丧。已经花了一周的时间来解决这个问题和NADA。在这一点上我真的很讨厌MS。
求求你帮帮我。
发布于 2010-07-15 08:39:58
最有可能发生的情况是,您的注册码写入了错误的注册表根目录。例如,HKCR是HKLM\Classes和HKCU\Classes的合并视图,在某些情况下,向HKCR的注册将在HKCU\Classes中结束,有时在HKCU\Classes\VirtualStore中,这取决于运行安装程序的操作系统和帐户。
此外,如果您依赖DllRegisterServer从MSI注册code,则MSI引擎甚至不知道您的注册表项,这取决于实际的dll代码。
我的建议是改变你的MSI,不使用DllRegisterServer自动注册,也不在HKCR下注册。相反,应将您的注册作为显式注册表项添加到HKLM\Classes下(除非您有特定的原因需要每个用户的COM注册,这是一个完全不同的主题)。
发布于 2016-04-05 21:27:12
是的,弗朗西·佩诺夫的回答很好。作为一种选择,您也可以尝试添加
regsvr32 yourdll.dll作为installexecute sequence的自定义操作,在部署文件后执行序列,删除时使用/u键注销
发布于 2016-04-07 01:03:34
在HKCR (和相关的映射配置单元)中注册需要管理员权限,而且总是这样做。这本质上与“我可以在XP中写入Program Files目录,但不能在Vista中写入”的问题相同。这是因为每个人都是XP上的管理员,但由于UAC没有人是管理员,除非他们以某种方式提升(以管理员身份运行是常见的,另一个是UAC提升提示)。
自注册在安装时失败的常见原因有:
如今的大多数工具,包括Visual Studio和WiX,都可以在构建时提取COM注册。它是静态数据,所以没有理由不在MSI文件中。在WiX的情况下,该工具称为热。这也意味着在安装时不需要调用Dll,从而避免了依赖关系问题。vsdraCOM设置可以做到这一点,我已经成功地使用了它,但像每个注册一样,它需要依赖的Dlls在构建时可用。没有很好的方法来查看它是否正常工作,但是如果您获得一个MSI编辑器(例如Windows SDK中的Orca )并使用它打开MSI文件,您应该会在Class表中看到您的类,并且在Registry表中会有一些东西。
如果你对什么是“不注册”有更多的细节,这也可能会有所帮助。是否缺少接口条目、CLSID条目、安装时的错误消息、应用程序因为无法实例化类而无法运行?
https://stackoverflow.com/questions/3251492
复制相似问题