Я использую DllSurrogate по умолчанию для включения автоматизации 32-битного COM-объекта в 64-битной. Это прекрасно работает в 64-битной Windows7 и Windows Server 2008 R2. Тем не мение; Обычный вариант Windows Server 2008 (до R2) полностью игнорирует запись DllSurrogate в реестре. Я исследовал это в течение нескольких дней и нашел документацию, что классический Windows Server 2008 имел отражение в реестре, которое игнорирует значение DllSurrogate, если оно пустое. (Я оставляю значение строки реестра пустым, чтобы использовать суррогат по умолчанию.) Чтобы обойти это неотраженное (не копируется между 32-битными и 64-битными регистрами), я запускаю regedit.exe * 32 и устанавливаю ключи. Затем я открываю обычный regedit и устанавливаю ключи. Все еще не повезло. Я также попытался установить для параметра реестра DllSurrogate значение c: \ windows \ syswow64 \ dllhost.exe, чтобы это значение не было пустым, но это не работало вообще (в любой ОС). Я получаю сообщение об ошибке «не могу создать объект activex».
Я воспроизвел проблему на 2 разных компьютерах с Windows Server 2008 (до R2). Я также убедился, что объект COM можно использовать на этих машинах при запуске из 32-разрядного приложения. Для тестирования я использовал 32-битный и 64-битный LINQPad. LINQPad, работающий как 32-битный, может создать объект COM. 64-разрядная LINQPad не может.
[текст ссылки] [1] http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx <- Документация о том, что запись реестра DllSurrogate не отражена в Windows Server 2008, но я не знаю, как обойти это ограничение. Я пытался использовать regedit.exe * 32 для непосредственного редактирования 32-битного реестра. </p>
Есть идеи, что мне здесь не хватает? Есть ли какая-то особая хитрость для использования DllSurrogate по умолчанию (dllhost.exe) на pre-R2? Переписать наш COM в .NET сейчас не вариант. Я надеюсь, что мне чего-то не хватает, так как это работает на последней версии Windows Server 2008 R2.
Спасибо, что заглянули!
Дэнни