2010-10-28 86 views
4

我正在使用默認的DllSurrogate來啓用64位32位COM對象的自動化。這在Windows7 64位和Windows Server 2008 R2中完美運行。然而;常規風味Windows Server 2008(R2之前)完全忽略註冊表中的DllSurrogate條目。我已經研究了幾天,發現經典Windows Server 2008具有註冊表反射的文檔,如果它的空白忽略了DllSurrogate值。 (我將註冊表字符串的值保留爲空,以使用默認的代理。)要解決此問題(未在32位和64位註冊表之間複製),我運行regedit.exe * 32並設置密鑰。然後我打開正常的註冊表並設置密鑰。仍然沒有運氣。我也嘗試將DllSurrogate註冊表值設置爲c:\ windows \ syswow64 \ dllhost.exe,以便該值不是空白,但根本不起作用(在任何操作系統上)。我收到的錯誤是「無法創建activex對象」。如何在Windows Server 2008上使用32位COM對象(適用於2008 R2,但不適用於2008)

我在2臺不同的Windows Server 2008(Pre R2)機器上重現了這個問題。我還證實,從32位應用程序啓動時,可以在這些機器上使用COM對象。我用LINQPad 32位和64位來測試。以32位運行的LINQPad可以創建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上運行。

感謝您的參觀! Danny

+0

您是否嘗試過使用64位Regedit並編輯HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Wow6432Node \ AppId? – 2010-10-28 15:19:31

+0

是的,但沒有運氣。它接受並在64位註冊表編輯器和32位註冊表中顯示AppId(我將其設置爲我的COM的GUID)。它似乎忽視了價值。 DLLHost.exe永遠不會出現在任務管理器中。感謝您的建議。 – Danny 2010-10-28 20:44:49

+0

我發現了一條線索。當我創建對象時,DllHost.exe啓動,但它的64位DllHost.exe。任何方式告訴它使用C:\ windows \ syswow64 \中的32位? – Danny 2010-10-28 21:23:44

回答

12

問題解決了!感謝Hans讓我走上正軌!我不小心將系統配置爲使用64位DLLHost.exe文件,該文件由於無法啓動32位COM對象而無法使用。

開始到結束,這裏是我如何使用64位應用程序中的32位COM對象。

  1. 與註冊表編輯器* 32註冊COM對象(C:\ WINDOWS \ SysWow64資料\註冊表編輯器)

  2. 進行下面的註冊表更改。一定要把這全部放在Wow6432Node下,這樣32位的DLLHost纔會被使用。

  3. 通過搜索類名的註冊表來確定您的COM對象的GUID。即。 Classname將是您傳遞給createobject的值,如CreateObject(「classname」)。

  4. 找到現有密鑰HKey_Classes_Root\Wow6432Node\CLSID\[GUID]。 使用COM對象GUID作爲值添加一個新的名爲AppID的REG_SZ(字符串)值。

  5. 添加新密鑰HKey_Classes_Root\Wow6432Node\AppID\[GUID]。 在此新密鑰下,添加一個名爲DllSurrogate的新REG_SZ(字符串)值。保留空值。

  6. 如果還沒有,請在HKey_Local_Machine\Software\Wow6432Node\Classes\AppID\[GUID]下創建新密鑰。 如果還沒有,請在此項下添加一個名爲DllSurrogate的新REG_SZ(字符串)值。保留空值。

現在當你創建你的COM對象時,你應該看到DLLHost.exe * 32出現在任務管理器中。打開任務管理器中的命令行列,您應該看到C:\windows\syswow64\dllhost.exe /processid:{YourCOMGUIDHere}

+0

我與原始問題具有完全相同的問題,但執行這些步驟後對我無效。 DLLHost.exe仍然是一個64位進程,我無法加載32位COM DLL中的任何類。爲了實現這一目標,您還需要採取其他措施嗎? – 2012-12-13 16:07:00

+0

謝謝,不知何故,這幫助解決了我的問題 – 2013-02-01 14:44:17

相關問題