使用安装程序添加自定义注册表项

时间:2018-09-30 23:38:20

标签: c# visual-studio-2017 setup-project solidworks

我写了一个用于Solidworks的插件(.dll)。为了使Solidworks能够找到它,我需要在ComRegistryFunction中设置一个额外的注册表项。 当我编译它并使用regasm.exe \tlb注册.dll时,一切都会按预期进行。

现在,我想分发Addin,并且我正在研究安装项目以将所有内容打包好。我在Google上搜索了很多,但坦率地说,要找到关于该主题的可靠信息非常困难。这是我所做的:

  • 将我的dll作为“主输出”添加到安装项目中
  • 对于此文件,将“注册”设置为“ vsdrpCOM”

但是,安装程序未设置自定义注册表项(似乎它没有运行我的类的ComRegisterFunction)。

通过手动将这些注册表项添加到安装项目的“注册表”选项卡中,我可以使它正常工作。但这意味着我必须手动输入类的GUID以及描述和标题,即使所有这些都已经在类中指定了。我知道我会忘记在将来的某个时刻更改一个或另一个。

如何使安装程序自动拉动这些注册键并进行设置?

我正在使用Visual Studio 2017和.Net v4。

2 个答案:

答案 0 :(得分:0)

如果可以的话,我强烈建议您从VS安装项目切换到wix。它具有陡峭的学习曲线,但在功能和可定制性方面却遥遥领先。要解决wix的问题,您可以使用工具集中附带的heat实用程序,并根据dll生成包含com注册的xml配置。我确实相信它将包括自定义注册,但是以防万一请先检查一下。

另一方面,如果您将来不打算使安装程序具有任何重大复杂性,我认为您可以对VS安装项目进行自定义操作,并使用Process.Start()手动调用regasm。或者最好将您的自定义注册内容放入自定义操作本身。

答案 1 :(得分:0)

您是正确的,Windows Installer函数不会调用任何注册功能代码。

vsdrpCOM设置应完成大部分注册,并且应在构建时将其提取到MSI文件的Class表中,并将其提取到注册表表中-您可以通过在Orca中打开MSI文件并查看提取的内容来进行检查。鉴于存在类和接口注册表项,您没有确切地说出缺少的内容。另一个困惑可能是您的MSI文件是针对32位还是64位,以及您希望在何处创建注册表项(类\根与软件\类以及本机64位与WoW6432)。还要注意,Windows Installer会按字面意义为每个用户设置“ Just me”,因此您将按用户COM注册,而不是按系统注册。

这可能会有所帮助,但过时了,但这些项目多年来没有改变:

https://www.red-gate.com/simple-talk/dotnet/visual-studio/build-and-deploy-a-net-com-assembly/

因此,请检查体系结构和“所有人/仅我”设置,然后查看那些MSI表以查看其中的内容。

相关问题