Dan*_*nny 4 com windows-server-2008
我使用默认的DllSurrogate来启用64位的32位COM对象的自动化.这在Windows7 64位和Windows Server 2008 R2中完美运行.然而; 常规风格Windows Server 2008(R2之前版本)完全忽略注册表中的DllSurrogate条目.我已经研究了几天,发现经典的Windows Server 2008具有注册表反射的文档,如果它的空白则忽略DllSurrogate值.(我将注册表字符串的值留空以使用默认的Surrogate.)要解决此问题(未在32位和64位注册表之间复制),我运行regedit.exe*32并设置密钥.然后我打开正常的regedit并设置密钥.仍然没有运气.我也尝试将DllSurrogate注册表值设置为c:\ windows\syswow64\dllhost.exe,以便该值不是空白但不是' 完全工作(在任何操作系统上).我收到的错误是"无法创建activex对象".
我在2台不同的Windows Server 2008(Pre R2)机器上重现了这个问题.我还验证了从32位应用程序启动时,COM对象可以在这些机器上使用.我使用LINQPad 32位和64位进行测试.LINQPad作为32位运行可以创建COM对象.64位LINQPad不行.
[链接文字] [1] < - 我正在使用的解决方案(适用于R2)http://msdn.microsoft.com/en-us/library/aa384253 (VS.85 ) .aspx < - DllSurrogate注册表的文档条目未反映在Windows Server 2008上,但我不知道如何规避此限制.我尝试使用regedit.exe*32直接编辑32位注册表.
我在这里缺少什么想法?是否有一些特殊的技巧在R2之前使用默认的DllSurrogate(dllhost.exe)?目前不能将我们的COM重写为.NET.我希望我错过了一些东西,因为它可以在最新的Windows Server 2008 R2上运行.
谢谢参观!丹尼
Dan*_*nny 12
问题解决了!谢谢汉斯让我走上正轨!我不小心将系统配置为使用64位DLLHost.exe文件,由于无法启动32位COM对象,因此无法正常工作.
从头到尾,这是我如何使用64位应用程序中的32位COM对象.
使用regedit*32注册COM对象(c:\ windows\syswow64\regedit)
进行以下注册表更改.一定要把这一切都放在Wow6432Node下,这样就可以使用32位的DLLHost.
通过搜索classname的注册表来确定COM对象的GUID.即.Classname将是您传递给createobject的值,如CreateObject("classname").
找到现有密钥HKey_Classes_Root\Wow6432Node\CLSID\[GUID].添加一个名为AppID的新REG_SZ(字符串)值,其中COM对象GUID作为值.
添加新密钥HKey_Classes_Root\Wow6432Node\AppID\[GUID].在此新密钥下,添加一个名为DllSurrogate的新REG_SZ(字符串)值.将值保留为空.
如果还没有,请在下面创建新密钥HKey_Local_Machine\Software\Wow6432Node\Classes\AppID\[GUID].如果尚未存在,请添加DllSurrogate在此键下调用的新REG_SZ(字符串)值.将值保留为空.
现在,当您创建COM对象时,您应该看到DLLHost.exe*32显示在任务管理器中.打开任务管理器中的命令行列,您应该看到C:\windows\syswow64\dllhost.exe /processid:{YourCOMGUIDHere}
| 归档时间: |
|
| 查看次数: |
15440 次 |
| 最近记录: |