我正在为我开发的解决方案构建一个安装程序。我的一个项目的输出是需要注册的DLL。我正在使用Visual Studio生成一个MSI,然后使用InstallShield进行修改。在Visual Studio中,我添加了一个自定义操作,该操作需要管理特权以执行并将DLL的寄存器属性设置为vsdrpCOMSelfReg
。当我在没有管理员特权的情况下运行MSI时,显示了一条消息,说操作需要管理员角色,当我确认和更改用户帐户时,安装完成而不会出错,但是DLL未注册。我想念什么吗?如何正确注册DLL?任何帮助都将不胜感激。
自我注册不是Windows安装程序的最佳实践。正确的方法是将COM元数据撰写到MSI中,并允许MSI复制文件并应用注册表数据。在InstallShield中,您可以通过为DLL创建组件,将DLL标记为密钥文件,然后右键单击文件,然后选择"提取com"。然后,installshield将模拟注册,并将这些信息撰写到正确的表中。在干净的机器上构建和测试。不需要自定义操作,安装程序将正确支持回滚方案。
即使是Visual Studio,也没有理由创建自定义操作来执行此操作。将文件标记为VSDRFCOM,并且将在构建时间中提取类注册到MSI的类表中。即使您要坚持自我注册,也可以将其标记为vsdrfcomselfreg,并且它将从MSI文件中的SelfReg表中注册。根本没有自定义行动。无论如何,正如克里斯托弗(Christopher)所说的那样,出于许多原因,在安装时间进行自我注册不是一个好习惯,其中之一是缺失的依赖性。