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

标签 .net excel com installation registry

在上一个问题中<How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list? > 有一个示例说明如何使用 VS 2008 创建注册表项的完整路径。前面答案中的所有内容都正常工作,除了我为 mscoree.dll 设置的完整路径(使用 VS 中的注册表编辑器)不起作用(这意味着它似乎什么也没做)。

完整的注册表路径是:

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

我设置的值是:

[系统文件夹]mscoree.dll

我可以输入任何内容(包括硬编码完整路径),但设置似乎并不重要,并且注册表始终包含 mscoree.dll 而没有任何路径。

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

我需要完整路径(如上一个问题中所述)的原因是,如果没有路径,Excel 在选择自动化服务器时会生成错误,因为它找不到 mscoree.dll(有趣的是,即使我收到错误注册工作正常)。

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

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

有人知道我做错了什么吗?

最佳答案

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

在您的情况下,它不起作用,因为 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)

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

关于.net - 注册为在客户端计算机上注册的 Excel 编写的 COM 服务器时出现问题(无法设置 mscoree.dll 的完整路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2553690/

相关文章:

c# - 从 C# 应用程序执行 excel

vba - 在 VBA 中隐藏用户窗体以便处理数据

excel - 当 Excel 单元格区域中的数据更新时提示消息框

c - Microsoft Office 应用程序 COM 接口(interface)

.net - Azure 与 SQL 迁移的持续集成

c# - ASP.NET 中 GridView 中的 PageIndexChanging

c# - NHibernate DuplicateMappingException 当两个类具有相同的名称但不同的命名空间时

c# - 增加/减少 SemaphoreSlim 中可用插槽的数量

windows - 在 Linux 世界中,最接近 Windows COM/DCOM 的东西是什么?

powershell - 使用 powershell 设置组件服务事务超时