部署Excel UDF

我有一个调用Web服务的Excel UDF。 UDF代码是一个自动化插件代码,它是一个C#类库,我为它创build了一个安装程序。 当我运行这个设置时,在toos – > addins – > excel的自动化插件列表中不会出现对特定插件代码的引用,并且这个函数不会在编辑栏中出现。 我正在使用VS 2008和Excel 2003。

我在这里错过了什么? 我应该定义Excel的path,以从中select一些东西,使其指向从udf代码生成的DLL? 还是有什么安全问题需要照顾? 客户端计算机的安全级别设置为“完全信任”,但插件未出现在列表中。

我在这里错过了什么?

发生这种情况是因为安装自动加载项需要在registry中创build自定义的“CLSID {GUID} \ Programmable”条目,创build自动化加载项时,通常通过包含标记为ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute在你的class级。 当您在程序集上运行RegAsm时,这些类将被注册。

但是,使用Visual Studio安装程序包时,ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute被安静地忽略。 发生这种情况是因为安装项目使用/ regfile开关运行RegAsm以生成包含所有必需的registry项的.reg文件。 这是.reg文件,然后在客户端运行.msi包时使用。 问题是当RegAsm通过/ regfile开关运行时,生成的.reg文件不包含由用户定义的寄存器函数(例如,用ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute标记的那些)所做的任何registry更新。

因此,您的自定义“CLSID {GUID} \ Programmable”registry项不会被创build,因此,自动化加载项没有显示在自动化加载项列表中。

要解决这种情况,您必须通过其他方式创build您自己的自定义“CLSID {GUID} \ Programmable”条目。 通过使用安装程序包的registry编辑器部分来做到这一点是最简单的。

正确处理自动加载项的安装程序包的所有步骤有点复杂。 幸运的是,我已经一步一步的解释了如何做到这一点(以及为什么会发生这种情况的更详细的描述)作为对这个问题的答案: 如何获得用VB.NET编写的用于Excel的COM服务器并在Automation Servers列表中注册 。

希望这可以帮助!

麦克风