VC ++ CRT Redist проблема - PullRequest
       1

VC ++ CRT Redist проблема

2 голосов
/ 27 сентября 2010

Я разработал 64-битную DLL-библиотеку с использованием C ++ и Visual Studio 2008, и я пытаюсь зарегистрировать ее на целевой машине с помощью 'regsvr32.exe'. Я проверил файл манифеста, и в нем четко указано, какая версия CRT необходима:

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

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

Ошибка журнала: создание контекста активации Ошибка ... Ссылка на сообщение об ошибке: ссылка на сборку не установлена в вашей системе.

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

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

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

Спасибо

Адриан.

РЕДАКТИРОВАТЬ * Воспроизводится только на Win XP 64, все отлично работает на Windows 7 64 бит.

Ответы [ 4 ]

1 голос
/ 11 ноября 2010

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

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

1 голос
/ 27 сентября 2010
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' ...

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

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

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

1 голос
/ 27 сентября 2010

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

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

1 голос
/ 27 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...