Excel 2007,Windows Vista,VB.NET,带有.NET 3.5 sp2的Visual Studio 2008,MSI安装程序包。
我有一个用VB.NET编写的Excel UDF。它作为COM服务器公开,因为您无法直接在.NET语言中创建Excel UDF。安装是一个真正的痛苦,因为没有任何安装设置似乎正确;它们都没有为您提供一个安装包,它将COM服务器放在客户端计算机上,注册了服务器,注册了类型库,并且组件在Excel 2007的自动化服务器列表中可见。
以下是类型库的安装设置,它们的缺陷在编译时和安装时显而易见:
vsdrfComSelfReg
vsdrfDoNotregister
vsdrfCOM
正确的设置应为vsdrfCOM,如here所述:
Q值。任何人都可以告诉我们做什么 vsdrfCOM意味着在一个安装项目中 视觉工作室?我可以使用它 检查属性“注册”之间 安装程序中添加文件的属性 项目
一个。这意味着Visual Studio会 在构建时提取COM注册数据 时间并将其放在MSI文件中 (主要是MSI文件的注册表, 还有班级表)。所以,当你 安装它你的代码不需要 自我注册,因为文件得到 复制到磁盘和注册表 条目被创建。它也会 创建类型库注册 在MSI的TypeLib中添加一个条目 表
许多困难似乎都是针对Vista的。特别是,使用REGCAP utility从.TLB文件生成.REG文件在Vista中不起作用。如果不是这样,也许this advice would be useful。相反,它在生成时会生成空的.REG文件。
我已经尝试了this StackOverflow post中的所有建议。该帖子对技术问题有很好的描述:
“参考”对话框中的条目 盒子来自HKCR \ TypeLib 注册表项,而不是来自HKCR \ CLSID。如果 你的装配没有出现在 引用对话框但编译了DLL 它仍然可以使用你的COM组件 意味着类和接口是 正确注册为您的 程序集,但是类型库 本身不是。
任何人都知道如何使安装注册组件和类型库?我无法访问Windows XP计算机。
详细说明为什么会这么糟糕
任何编译的代码都不需要.TLB来调用它。我没有像你一样尝试部署Excel自动化加载项,但我的猜测是UDF应该加载并运行得很好。
在Excel中不太像。
据我所知,用户必须从命令行运行regasm.exe才能使Excel UDF / COM服务器可用。如何告诉人们从命令行运行regasm以安装Excel的加载项?
编辑2009-10-04
迈克的评论和指示非常棒。我不知道的关键是安装程序有一个内置的注册表编辑器,用于添加注册表项。哦,并且Microsoft安装程序没有调用带有属性ComRegisterFunctionAttribute的安装函数。我已经从他引用的来源那里得到了关于编写安装程序功能的指示。答案 0 :(得分:29)