我正在使用默認的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
您是否嘗試過使用64位Regedit並編輯HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Wow6432Node \ AppId? – 2010-10-28 15:19:31
是的,但沒有運氣。它接受並在64位註冊表編輯器和32位註冊表中顯示AppId(我將其設置爲我的COM的GUID)。它似乎忽視了價值。 DLLHost.exe永遠不會出現在任務管理器中。感謝您的建議。 – Danny 2010-10-28 20:44:49
我發現了一條線索。當我創建對象時,DllHost.exe啓動,但它的64位DllHost.exe。任何方式告訴它使用C:\ windows \ syswow64 \中的32位? – Danny 2010-10-28 21:23:44