2010-09-27 2 views
2

Я разработал 64-битную dll с использованием C++ и Visual Studio 2008, и я пытаюсь зарегистрировать ее на целевой машине с помощью «regsvr32.exe». Я проверил файл манифеста и он ясно заявляет, что версия CRT требуется:VC++ CRT Redist problem

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' /> 

При попытке зарегистрировать файл я всегда получаю сообщение об ошибке бок о бок о том, что параметры программы неверны и что я должен переустановить его.

Log Error: Generate Activation Context failed... Reference error message: The referenced assembly is not installed on your system.

Целевая машина работает под управлением Windows Xp Professional 64 бит. Я попытался установить соответствующий VIS ++ redistributable пакет (VC++ 2008 Redist x86 и x64), создать настройку и включить соответствующий модуль слияния (microsoft_vc90_crt_x86_x64.msm), установить все распространяемые VC++ пакеты и т. Д. Независимо от того, что установлено, он всегда будет терпеть неудачу ,

Если я проверяю зависимые файлы, и они правильно расположены внутри папки WinSxS, но если я запустим Dependency Walker в файле, он также пожалуется, что файлы из VC9 CRT не могут быть найдены.

Если я создам файл для 32 бит, он будет правильно зарегистрирован на 32-битной ОС. У меня заканчиваются идеи, поэтому любая помощь очень ценится.

Thanks,

Adrian.

EDIT * Это воспроизводится только на Win XP 64, все отлично работает на Windows 7 64 бит.

+1

Это должно работать, документируйте вашу проблему лучше. Скопируйте и вставьте * точное сообщение журнала событий, запишите * точный * модуль слияния, который вы используете. –

ответ

1

В конце концов мне удалось это исправить, включив в новую версию C++ распространяемого модулей сливаться в установке вместе со всеми требуемые модули слияния политик, чтобы перенаправить вызовы на любую старую версию на новую, доступную.

Самое главное здесь, что exe redistributable включает файлы политики и модули слияния, поэтому их необходимо отдельно добавлять.

1

Я не эксперт в установщиках, но подумал ли вы о распространении распространяемого в корневой папке приложения?

Что касается меня, я никогда не слышал об использовании regsvr32.exe для установки crt redist's.

+0

Привет, в этом случае развертывание redis в той же папке не применимо, и я не использую regsvr32 для их установки, я использую его для регистрации моей dll, потому что это COM-компонент. –

1
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' ... 

это не должно быть

<assemblyIdentity type='win64' name='Microsoft.VC90.CRT' ... 

?

Вам нужен 64-разрядную среду выполнения

+0

Это имеет смысл, но манифест генерируется VS, и я думал, что он должен знать, что делает. Я попытаюсь изменить его и посмотреть, как он работает. –

1

Похоже, несмотря на приложение 64 бит он ищет 32-битный Crt библиотек DLL. Вы пытались установить 32-битный распространяемый пакет?

Вот хорошее описание о том, как отследить неудачи SideBySide: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

+0

Да, я установил обе версии распространяемых пакетов, но никаких изменений, спасибо за ссылку, на которую я смотрю. –

Смежные вопросы