我有一个调用 Web 服务的 Excel UDF。 UDF 代码是一个自动化插件代码,它是一个 C# 类库,我为其创建了一个安装程序。当我运行设置时,Excel的toos-->addins-->automation addins列表中没有出现对特定插件代码的引用,并且该函数也没有出现在公式栏中。我使用的是 VS 2008 和 Excel 2003。
我在这里错过了什么吗?我是否应该定义 Excel 必须从中选择 dll 的路径,以便它指向从 udf 代码生成的 dll?或者有什么安全问题需要注意吗?客户端计算机的安全级别设置为“完全信任”,但该插件未出现在列表中。
我在这里错过了什么吗?
发生这种情况是因为安装自动化加载项需要在注册表中创建自定义“CLSID{GUID}\Programmable”条目,在创建自动化加载项时,通常通过包含标有ComRegisterFunction属性 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comregisterfunctionattribute.aspx and ComUnregisterFunctionAttribute http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comunregisterfunctionattribute(VS.80).aspx在你的班级内。当您在程序集上运行 RegAsm 时,就会注册这些类。
但是,当使用 Visual Studio 安装包时,ComRegisterFunctionAttribute 和 ComUnregisterFunctionAttribute 会被悄悄忽略。出现这种情况是因为安装项目使用 /regfile 开关运行 RegAsm,以生成包含所有必需注册表项的 .reg 文件。当 .msi 包在客户端站点运行时,将使用此 .reg 文件。问题是,当 RegAsm 通过 /regfile 开关运行时,生成的 .reg 文件不包含由用户定义的寄存器函数(例如,用 ComRegisterFunctionAttribute 和 ComUnregisterFunctionAttribute 标记的函数)进行的任何注册表更新。
因此,不会创建您的自定义“CLSID{GUID}\Programmable”注册表项,因此您的自动化加载项不会显示在自动化加载项列表中。
要解决这种情况,您必须通过其他方式创建您自己的自定义“CLSID{GUID}\Programmable”条目。最简单的方法是使用注册表编辑器 http://msdn.microsoft.com/en-us/library/aa243964(VS.60).aspx安装包的部分。
正确处理自动化插件安装包的所有步骤有些复杂。幸运的是,我有一个关于如何执行此操作的分步解释(以及关于为什么会发生这种情况的更详细描述)作为问题的答案:如何在自动化服务器列表中安装并注册用 VB.NET 编写的 COM Server for Excel https://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-written-in-vb-net-installed-and-registered-in-aut/1506932#1506932.
希望这可以帮助!
Mike
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)