我们希望使用msi安装几个dll。
在我们的测试环境中,我们使用regasm -codebase
来注册dll。
据我通过谷歌搜索了解到,通过将register
属性设置为vsdraCOM
,可以在msi项目中实现这一点。
问题是当我们运行安装程序并检查注册表时,代码库路径设置为构建msi时文件所在的路径。
答案 0 :(得分:0)
我要扩展Hans'回答和链接信息,它可能不仅仅是评论可以容纳。
该reg文件将包含文件的路径,链接文章建议使用[TARGETDIR],如果文件没有安装到应用程序文件夹,这基本上是错误的。文件的路径应该在您导入的reg文件中写为[#file-key]。在VS安装项目中,文件密钥(仅作为示例)类似于_B049230C37DE4B6787C578DCEE30252A。使用Orca打开您的MSI文件,转到文件表并使用与您的文件名对应的文件列中的文件密钥。
来自这里:
http://msdn.microsoft.com/en-us/library/aa368609%28v=vs.85%29.aspx
第7个要点。无论安装位置如何,它都会解析为文件路径。
可以做的另一件事是让Visual Studio做不正确的事情,然后使用Orca转到Registry表,找到路径并将[#file key]放在其中,如[#_B049230C37DE4B6787C578DCEE30252A]和人有时使用post build脚本进行那些更新以更新MSI。
这些都不是很好,但它们应该可以帮助您避免使用GAC。 VS安装项目真的应该使用[#file key]语法,这只是我假设的一个愚蠢的错误。
答案 1 :(得分:0)
作为一名全职工作人员,写作安装已有18年,我的第一个建议是切换到Windows Installer XML。如果你坚持使用.VDPROJ,我建议你阅读:Redemption of Visual Studio Deployment Projects。
概念是您使用Windows Installer XML创建合并模块,然后使用.VDPROJ使用该合并模块。在Wix中,您使用Heat来收集DLL。它将提取COM / Regasm元数据并将其编写为Registry表条目。这使用创作最佳实践提供了一个很好的干净封装,并且无需对构建的MSI数据库进行任何构建后的黑客攻击。