首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSI分离。MSI将不会注册DLL

MSI分离。MSI将不会注册DLL
EN

Stack Overflow用户
提问于 2010-07-15 07:56:56
回答 3查看 1.7K关注 0票数 2

我的MSI安装程序无法在XP上注册DLL。在Vista上,它不会注册,除非我是管理员。在Win7上,它将随机注册或不注册动态链接库。

在微星不注册动态链接库后,用户被迫进入安装文件夹,输入"regsvr32 mydllname.dll“-然后一切正常(这证明动态链接库是健康的和正常的)。

该文件的“注册”属性是MSI项目中的"selfReg“。"COM“也不起作用。

我开始认为要么是我产生了幻觉,要么是MSI根本无法注册DLL……非常沮丧。已经花了一周的时间来解决这个问题和NADA。在这一点上我真的很讨厌MS。

求求你帮帮我。

EN

回答 3

Stack Overflow用户

发布于 2010-07-15 08:39:58

最有可能发生的情况是,您的注册码写入了错误的注册表根目录。例如,HKCRHKLM\ClassesHKCU\Classes的合并视图,在某些情况下,向HKCR的注册将在HKCU\Classes中结束,有时在HKCU\Classes\VirtualStore中,这取决于运行安装程序的操作系统和帐户。

此外,如果您依赖DllRegisterServer从MSI注册code,则MSI引擎甚至不知道您的注册表项,这取决于实际的dll代码。

我的建议是改变你的MSI,不使用DllRegisterServer自动注册,也不在HKCR下注册。相反,应将您的注册作为显式注册表项添加到HKLM\Classes下(除非您有特定的原因需要每个用户的COM注册,这是一个完全不同的主题)。

票数 3
EN

Stack Overflow用户

发布于 2016-04-05 21:27:12

是的,弗朗西·佩诺夫的回答很好。作为一种选择,您也可以尝试添加

代码语言:javascript
复制
regsvr32 yourdll.dll

作为installexecute sequence的自定义操作,在部署文件后执行序列,删除时使用/u键注销

票数 0
EN

Stack Overflow用户

发布于 2016-04-07 01:03:34

在HKCR (和相关的映射配置单元)中注册需要管理员权限,而且总是这样做。这本质上与“我可以在XP中写入Program Files目录,但不能在Vista中写入”的问题相同。这是因为每个人都是XP上的管理员,但由于UAC没有人是管理员,除非他们以某种方式提升(以管理员身份运行是常见的,另一个是UAC提升提示)。

自注册在安装时失败的常见原因有:

  1. 缺少标高(例如,每用户安装从不显示UAC标高对话框)。
  2. 缺少依赖项。可能存在您所依赖的Dll,但它不在目标系统上。如果在安装完成后注册起作用,则可能依赖于Win32或托管代码程序集。如果您对转到WinSxS的C++运行时有依赖,并且您将其作为合并模块包含在内,那么它将在安装完成后才会被提交,并且您的注册将失败。GAC中的程序集也是如此,但在您的Win32注册案例中似乎不太可能。如果它在Windows7上是随机的,那通常是因为一些系统已经安装了(比方说) C++运行时,而另一些则没有。

如今的大多数工具,包括Visual Studio和WiX,都可以在构建时提取COM注册。它是静态数据,所以没有理由不在MSI文件中。在WiX的情况下,该工具称为热。这也意味着在安装时不需要调用Dll,从而避免了依赖关系问题。vsdraCOM设置可以做到这一点,我已经成功地使用了它,但像每个注册一样,它需要依赖的Dlls在构建时可用。没有很好的方法来查看它是否正常工作,但是如果您获得一个MSI编辑器(例如Windows SDK中的Orca )并使用它打开MSI文件,您应该会在Class表中看到您的类,并且在Registry表中会有一些东西。

如果你对什么是“不注册”有更多的细节,这也可能会有所帮助。是否缺少接口条目、CLSID条目、安装时的错误消息、应用程序因为无法实例化类而无法运行?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3251492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档