c# - 使用安装程序添加自定义注册表项
问题描述
我为 Solidworks 编写了一个插件(一个 .dll)。为了让 Solidworks 找到它,我需要在ComRegistryFunction
. 当我编译它并使用 .dll 注册时regasm.exe \tlb
,一切都按预期工作。
现在我想分发插件,并且我正在研究设置项目以将所有东西都很好地打包。我搜索了很多,但坦率地说,很难找到关于这个主题的可靠信息。这是我所做的:
- 将我的 dll 作为“主要输出”添加到安装项目
- 对于此文件,将注册设置为“vsdrpCOM”
但是,安装程序没有设置自定义注册表项(它似乎没有运行我班级的 ComRegisterFunction)。
我可以通过手动将这些注册表项添加到安装项目的注册表选项卡来使其工作。但这意味着我必须手动输入类的 GUID,以及描述和标题,即使所有这些都已经在类中指定了。我知道我会忘记在未来的某个时候改变其中的一个。
如何让安装程序自动提取这些注册密钥并进行设置?
我正在使用 Visual Studio 2017 和 .Net v4。
解决方案
你是对的,Windows Installer 函数不调用任何注册函数代码。
vsdrpCOM 设置应该完成大部分注册,它应该在构建时提取到 MSI 文件的类表和注册表表中 - 您可以通过在 Orca 中打开 MSI 文件并查看提取的内容来检查。鉴于有类和接口注册表项,您没有确切说明缺少什么。另一个混淆可能是您的 MSI 文件是针对 32 位还是 64 位,以及您希望在哪里创建注册表项(类\根与软件\类以及本机 64 位与 WoW6432)。另请注意,Windows 安装程序从字面上采用每个用户的“Just me”设置,因此您将按用户注册 COM,而不是按系统注册。
这可能会有所帮助,但这些项目多年来没有改变:
https://www.red-gate.com/simple-talk/dotnet/visual-studio/build-and-deploy-a-net-com-assembly/
因此,请检查体系结构和“所有人/仅我”设置,并查看那些 MSI 表以了解其中的内容。
推荐阅读
- r - Groupby 一列然后总结另一个值列并计算行数,然后计算 R 中每个列的百分比
- flutter - Flutter ListView.Builder Scroll 正在部分工作
- python - 如何从从文件中读取的每行字符串的开头删除 b?
- oracle - 来自 OIC 的 Twilio whatsapp REST API 调用给出此错误 400,邮递员调用工作正常
- javascript - 每当班级名称发生变化时如何发出警报
- python - Azure 函数应用:已安装依赖项,但未找到某些依赖项
- node.js - Webpack - 未找到模块:错误:无法解析 'node_modules\chokidar\lib'
- xml - MS 项目 - 导入的 XML 持续时间、开始和结束日期错误
- c# - C# SqlDataAdapter SelectCommand:将参数传入 TSQL 'execute'
- python-3.x - PyQt5:可以通过 QPushButton 触发 QAction 功能吗