Алексей Иванов (alexyv) wrote,
Алексей Иванов
alexyv

Categories:

Проблема с установкой merge-модуля VC2005 x64

Read it in English

В очередной раз пришлось разбираться с ошибками установки библиотек Visual C++ 2005 x64. (В прошлый раз пришлось бороться с тем, что компоненты приложения ссылались на разные версии C++ runtime. Именно тогда в инсталляторе стали использоваться merge-модули.)

В этот раз на системах Windows 7 и Windows Server 2008 R2. Во время установки возникает следующая ошибка:
Ошибка при установке Visual C++ 2005 x64 runtime из merge-модуля

Текст сообщения:

An error occured during the installation of assembly component {844EFBA7-1C24-9382-A01F-C8B3B9A1E18E}.
HRESULT: 0x80073715.

В подробном логе, полученном с помощью (msiexec /i prod.msi /l*v msi.log), нашлись следующие записи:

MSI (s) (E0:E0) [15:43:58:875]: Assembly Error:The identities of the manifests are identical but their contents are different.
MSI (s) (E0:E0) [15:43:58:875]: Note: 1: 1935 2:
{844EFBA7-1C24-93B2-A01F-C8B3B9A1E18E} 3: 0x80073715 4: IAssemblyCacheItem 5:
Commit 6:
Microsoft.VC80.CRT,type="win32",version="8.0.50727.4053",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64"
MSI (s) (E0:E0) [15:43:58:875]: Assembly Error (sxs): Please look into
Component Based Servicing Log located at -121510792ndir\logs\cbs\cbs.log to get
more diagnostic information.
Error 1935. An error occured during the installation of assembly component
{844EFBA7-1C24-93B2-A01F-C8B3B9A1E18E}. HRESULT: 0x80073715. assembly
interface: IAssemblyCacheItem, function: Commit, assembly name:
Microsoft.VC80.CRT,type="win32",version="8.0.50727.4053",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64"

Лог файл %winndir%\logs\cbs\cbs.log не предоставил много больше информации, хотя в нем содержался мнемонический код ошибки: STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT. Этот код ошибки означает, что в системе уже есть сборка с таким же identity, что и устанавливаемая, и их версии тоже совпадают, но при этом устанавливаемые файлы отличаются.

На доступных мне машинах я не смог воспроизвести проблему: успешно устанавливается и работает. В процессе исследований выяснилось, что на проблемных машинка уже установлена сборка (assembly) Microsoft Visual C++ 2005 x64 Runtime.

Установил у себя из vcredist_x64.exe. После этого установка продукта стала завершаться с ошибкой.

Провел я и обратный эксперимент: на чистую машинку сначала установил наш продукт, а затем VC++ 2005 runtime. В результате установка vcredist_x64.exe завершилась с такой же ошибкой:
Ошибка при установке Visual C++ 2005 x64 runtime из vcredist_x64.exe

Текст сообщения:

Product: Microsoft Visual C++ 2005 Redistributable (x64) -- Error 1935.An error occurred during the installation of assembly 'Microsoft.VC80.CRT,type="win32",version="8.0.50727.4053",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64"'. Please refer to Help and Support for more information. HRESULT: 0x80073715. assembly interface: IAssemblyCacheItem, function: Commit, component: {844EFBA7-1C24-93B2-A01F-C8B3B9A1E18E}

Решил сравнить содержимое папок C:\Windows\winsxs\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053 после установки из merge-модуля и после vcredist_x64.exe. Сборка содержит три файла: msvcm80.dll, msvcp80.dll, msvcr80.dll. Версии и размеры этих файлов совпадают в обоих вариантах установки. Но все равно два файла из набора отличаются друг от друга. Я выяснил, что отличаются они временем цифровой подписи: В merge-модулях библиотеки подписаны 12 июля 2009 г. в 11 часов, а в vcredist_x64.exe 12 июля 2009 г. в 6 часов:

Цифровая подпись msvcr80.dll из merge-модуля Цифровая подпись msvcr80.dll из vcredist_x64.exe

На системах с Windows XP и Windows Server 2003 подобная разница не приводила к ошибке. А на более новых Windows 7 и Windows Server 2008 R2 приводит к ошибке.

В Microsoft Connect эта проблема описана: 8.0.50727.4053 x64 CRT merge modules fails to install on x64 but ok on x86. Это же сообщение можно найти на форуме MSDN. Вопрос помечен как решенный, но ответ какой-то бессодержательный и невразумительный. В сообщении есть ссылка на другое описание такой же проблемы в Microsoft Connect.

И у меня тоже никакого решения для преодоления данной трудности.
Ясно одно, что Visual C++ 2005 x64 runtime нельзя установить одновременно и из merge-модулей, и из vcredist_x64.exe, чего быть не должно.

С 32 битной (x86) версией таких проблем нет: всё прекрасно работает.

Tags: msi, windows, работа
Subscribe
promo alexyv september 22, 2015 23:52 16
Buy for 10 tokens
Благодаря сообществу spbblog в прошлое воскресенье побывал на выставке Magic of Light. В назначенное время у гардероба нас ожидала девушка. Когда все собрались, мы отправились на шоу «Семь граней света» от музея занимательной науки ЛабиринтУм. Проходит оно вот в таком…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments