注册为客户端计算机上注册的Excel编写的COM服务器时出现问题(无法设置mscoree.dll的完整路径)

use*_*445 8 .net com registry excel installation

在上一个问题中< 如何在VB.NET中安装并注册自动化服务器列表中获取用于Excel的COM Server for Excel?>有一个示例说明如何使用VS 2008创建注册表项的完整路径.上一个答案中的所有内容都能正常工作,除了我设置的完整路径(使用VS中的注册表编辑器)mscoree.dll无法正常工作(意思是它什么都不做).

完整的注册表路径是:

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32的\(默认)

我设置的值是:

[SystemFolder] MSCorEE.dll中

我可以放任何东西(包括硬编码完整路径)但设置似乎并不重要,并且注册表始终包含没有任何路径的mscoree.dll.

我已经尝试通过VS向注册表路径添加另一个值,并且正常工作,包括具有[SystemFolder]指定的完整路径.

我需要完整的路径(如在上一个问题解释)的原因是,如果没有路径,Excel将生成当自动化服务器被选定为它找不到mscoree.dll中(有趣的是,即使我收到一个错误登记工作确定一个错误).

我正在通过安装项目进行安装,否则工作正常.

我在VISTA*64系统上安装但在其他操作系统上遇到了同样的错误.

有谁知道我做错了什么?

Har*_*wok 1

我没有尝试过,但我猜测这与 VS.NET 放入注册表项“[SystemFolder]mscoree.dll”的时间有关。它在原来的帖子中工作。这可能是因为 VS.NET 首先运行“regasm /regfile”,然后用“[SystemFolder]mscoree.dll”覆盖该密钥

在您的情况下,它不起作用,因为 VS.NET 首先将您的注册表项“[SystemFolder]mscoree.dll”放入 MSI 注册表表中,然后您的值被“regasm /regfile”输出的值覆盖。

为了排除VS.NET覆盖你的值的可能性,我认为你可以标记你的DLL vsdrpDoNotRegister。然后,VS.NET 不会对您的注册表执行任何操作。现在,您可以自己正确完成插件注册。然而,正如原文所说,VS.NET 所做的只是简单地调用“regasm /regfile”。你为什么不自己做呢。从“regasm /regfile your.dll”获取.reg文件后,您唯一需要做的就是将其导入注册表。右键单击“目标计算机上的注册表”,然后单击“导入...”菜单。就是这样。这并不难。导入 reg 文件后,您应该看到以下密钥

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32\(default)
Run Code Online (Sandbox Code Playgroud)

该值仍应设置为 mscoree.dll。现在,您只需将其更改为 [SystemFolder]mscoree.dll 即可。