如何在VB.NET中安装并在Automation Servers列表中注册的用于Excel的COM Server for Excel?

时间:2009-10-01 22:32:14

标签: .net excel com installation

版本

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

  • 在编译安装项目期间没有警告
  • 模块xxx.tlb无法注册。 HRESULT -2147024703
  • 组件的ProgID和GUID在注册表中设置,但该组件未出现在自动化服务器列表中

vsdrfDoNotregister

  • 编译期间没有警告
  • 安装有效但当然TLB未注册

vsdrfCOM

  • 编译时警告:警告:无法为名为“xxx.tlb”的文件创建注册信息
  • 类型库未在安装期间注册

正确的设置为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中不太像。

  • 用户打开工作表并尝试引用UDF。找不到它,因为未加载DLL。的 FAIL
  • 用户转到“主页”|“Excel选项”|“加载项”|“Excel加载项+转到”,“加载项”对话框中未列出COM服务器。的 FAIL
  • 然后,用户按下自动化服务器以获取可用自动化服务器的列表。 DLL不在那里。的 FAIL
  • 用户返回“加载项”对话框并选择“浏览”,导航到安装目录,然后选择DLL(“XXX不是有效的加载项”)或类型库(“您选择的文件”不包含新的自动化服务器,或者您没有足够的权限......“)。的 FAIL

据我所知,用户必须从命令行运行regasm.exe才能使Excel UDF / COM服务器可用。如何告诉人们从命令行运行regasm以安装Excel的加载项?


编辑2009-10-04

迈克的评论和指示非常棒。我不知道的关键是安装程序有一个内置的注册表编辑器,用于添加注册表项。哦,并且Microsoft安装程序没有调用带有属性ComRegisterFunctionAttribute的安装函数。我已经从他引用的来源那里得到了关于编写安装程序功能的指示。

1 个答案:

答案 0 :(得分:29)