2010-01-22 49 views
3

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

我在这里错过了什么吗?我是否应该定义Excel从中选择dll的路径,以便它指向由udf代码生成的dll?或者是否有任何安全问题需要处理?客户端计算机的安全级别设置为“完全信任”,但插件未显示在列表中。

我在这里错过了什么吗?

+1

对不起,但我也不是很确定我是如何做到表示我的满意! – Sandy 2010-01-25 06:50:15

回答

6

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

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

因此,您的自定义“CLSID {GUID} \ Programmable”注册表项未被创建,因此,自动化加载项未显示在自动化加载项列表中。

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

正确处理自动化加载项的安装程序包的所有步骤有点复杂。幸运的是,我已经一步一步地解释了如何做到这一点(以及更详细的描述为什么会发生这种情况),作为对这个问题的回答:How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list

希望这会有所帮助!

Mike

+0

我遵循你所描述的程序,但仍然没有运气。我的GUID出现在CLSID下的注册表编辑器列表中,但该DLL并未出现在自动化插件列表中 – Sandy 2010-01-25 06:45:04

+1

我不知道该说些什么,除非您必须非常仔细地遵循这些说明。如果你这样做,你应该在注册表中看到一个“CLSID {GUID} \ Programmable”条目,这是关键。确保是这种情况,如果没有,请尝试再次按照说明操作,如下所述:http://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-写在vb-net-installed-and-registered-in-aut/1506932#1506932 – 2010-01-25 12:40:08

+0

@Mike这里可以GUID是什么东西?假设我可以拥有这样一个GUID,“{ExcelAutomationFunction}”,不是吗? – woodykiddy 2011-08-31 05:48:36