2014-02-06 80 views
1

我正在为我开发的解决方案构建安装程序。我的一个项目的输出是需要注册的dll。我使用Visual Studio生成MSI,然后使用InstallShield修改它。在Visual Studio中,我添加了需要执行管理员权限的自定义操作,并将dll的注册属性设置为vsdrpCOMSelfReg。当我在没有管理员权限的情况下运行msi时,会显示一条消息,指出操作需要管理员角色,当我确认并更改用户帐户时,安装完成时没有任何错误,但是该dll不会被注册。 我错过了什么吗?如何正确注册一个DLL? 任何帮助将不胜感激。Installshield MSI无法注册dll

+0

你为什么要构建一个Visual Studio MSI,然后说InstallShield失败? –

+0

'我用Visual Studio生成一个MSI,然后用InstallShield修改它。“这就是我所说的 – Kira

回答

4

SelfRegistration不是Windows安装程序的最佳实践。正确的方法是将COM元数据写入MSI,并允许MSI复制文件并应用注册表数据。在InstallShield中,通过为您的DLL创建组件,将该DLL标记为密钥文件,然后右键单击该文件并选择Extract COM来实现此目的。然后,InstallShield将模拟注册并将该信息创建为正确的表格。在一台干净的机器上构建和测试。不需要自定义操作,安装程序将正确支持回滚场景。

2

没有理由,甚至创建自定义操作要做到这一点,即使是Visual Studio中。将该文件标记为vsdrfCOM,并将构建时将类注册解压缩到MSI的Class表中。即使你坚持自注册,你也可以将它标记为vsdrfComSelfReg,它将从MSI文件的SelfReg表中注册。根本没有自定义操作。无论如何,正如克里斯托弗所说的那样,在安装时进行自我注册并不是一个好习惯,原因有很多,其中之一是缺少依赖关系。