gpt4 book ai didi

com - 如何在 Windows Server 2008 上使用 32 位 COM 对象(适用于 2008 R2 但不适用于 2008)

转载 作者:行者123 更新时间:2023-12-04 22:04:15 51 4
gpt4 key购买 nike

我使用默认的 DllSurrogate 来启用 64 位 32 位 COM 对象的自动化。这在 Windows7 64 位和 Windows Server 2008 R2 中完美运行。然而;常规风格的 Windows Server 2008(R2 之前)完全忽略注册表中的 DllSurrogate 条目。我已经研究了几天,发现经典 Windows Server 2008 具有注册表反射的文档,如果 DllSurrogate 值为空白,则忽略该值。 (我将注册表字符串的值留空以使用默认代理。)为了解决这个未反射(reflect)的问题(不在 32 位和 64 位注册表之间复制),我运行 regedit.exe*32 并设置键。然后我打开普通的 regedit 并设置 key 。仍然没有运气。我还尝试将 DllSurrogate 注册表值设置为 c:\windows\syswow64\dllhost.exe,以便该值不为空,但根本不起作用(在任何操作系统上)。我收到的错误是“无法创建 activex 对象”。

我在 2 台不同的 Windows Server 2008 (Pre R2) 机器上重现了这个问题。我还验证了 COM 对象可以在从 32 位应用程序启动时在这些机器上使用。我使用 LINQPad 32 位和 64 位进行测试。作为 32 位运行的 LINQPad 可以创建 COM 对象。 64 位 LINQPad 不能。

[链接文本][1] <-- 我正在使用的解决方案(适用于 R2)
http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx <-- DllSurrogate 注册表项未反射(reflect)在 Windows Server 2008 上的文档,但我不知道如何规避此限制。我尝试使用 regedit.exe*32 直接编辑 32 位注册表。

任何想法我在这里缺少什么?是否有一些特殊的技巧可以在 R2 之前使用默认的 DllSurrogate (dllhost.exe)?将我们的 COM 重写为 .NET 目前不是一种选择。我希望我只是遗漏了一些东西,因为这确实适用于最新的 Windows Server 2008 R2。

谢谢参观!
丹尼

最佳答案

问题解决了!感谢汉斯让我走上正轨!我不小心将系统配置为使用 64 位 DLLHost.exe 文件,该文件不起作用,因为它无法启动 32 位 COM 对象。

从头到尾,这是我如何能够从 64 位应用程序使用我的 32 位 COM 对象。

  • 使用 regedit*32 (c:\windows\syswow64\regedit) 注册 COM 对象
  • 进行以下注册表更改。确保将所有这些都放在 Wow6432Node 下,以便使用 32 位 DLLHost。
  • 通过在注册表中搜索类名来确定您的 COM 对象的 GUID。 IE。 Classname 将是您传递给 createobject 的值,例如 CreateObject("classname")。
  • 定位现有 key HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
    添加名为 AppID 的新 REG_SZ(字符串)值,并将 COM 对象 GUID 作为值。
  • 添加新 key HKey_Classes_Root\Wow6432Node\AppID\[GUID]
    在这个新键下,添加一个名为 DllSurrogate 的新 REG_SZ(字符串)值。将该值留空。
  • 如果还没有,在 HKey_Local_Machine\Software\Wow6432Node\Classes\AppID\[GUID] 下创建新的 Key。
    如果尚未存在,请在此键下添加一个名为 DllSurrogate 的新 REG_SZ(字符串)值。将该值留空。

  • 现在,当您创建 COM 对象时,您应该会看到 DLLHost.exe*32 出现在任务管理器中。打开任务管理器中的命令行列,您应该看到 C:\windows\syswow64\dllhost.exe /processid:{YourCOMGUIDHere}

    关于com - 如何在 Windows Server 2008 上使用 32 位 COM 对象(适用于 2008 R2 但不适用于 2008),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4043954/

    51 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com