我正在为我开发的解决方案构建安装程序。我的一个项目的输出是一个需要注册的DLL。我正在使用Visual Studio生成MSI,然后使用InstallShield对其进行修改。在visual studio中,我添加了一个需要执行管理员权限的自定义操作,并将dll的register属性设置为vsdrpCOMSelfReg
。当我在没有管理员权限的情况下运行msi时,会显示一条消息,指出操作需要管理员角色,当我确认并更改用户帐户时,安装完成没有任何错误,但是dll没有注册。
我错过了什么吗?如何正确注册一个DLL?
任何帮助都将非常感激。
答案 0 :(得分:4)
SelfRegistration不是Windows Installer的最佳做法。正确的方法是将COM元数据编写到MSI中,并允许MSI复制文件并应用注册表数据。在InstallShield中,您可以通过为DLL创建组件,将DLL标记为密钥文件,然后右键单击该文件并选择Extract COM来实现此目的。然后,InstallShield将模拟注册并将该信息创建到正确的表中。在干净的机器上构建和测试。不需要自定义操作,安装程序将正确支持回滚方案。
答案 1 :(得分:2)
即使它是Visual Studio,也没有理由甚至创建自定义操作来执行此操作。将文件标记为vsdrfCOM,类注册将在构建时提取到MSI的Class表中。即使您坚持自行注册,也可以将其标记为vsdrfComSelfReg,并且它将从MSI文件中的SelfReg表进行注册。根本没有自定义操作。无论如何,正如克里斯托弗所说,在安装时运行自我注册并不是一个好习惯,原因有很多,其中一个原因是缺少依赖性。