Microsoft VC Runtime Requirement и SXS error для настройки пользовательских действий в Vista - PullRequest
0 голосов
/ 11 ноября 2009

Я создал проект установки с VS2005 для разрабатываемого приложения, которое отлично устанавливается на Windows 2000 и XP, но при попытке запустить установщик на Vista выдает следующую ошибку:

Проблема с этой Windows Пакет установщика. Требуется программа для этой установки завершить не удалось беги.

Эта ошибка возникает в самом конце процесса установки, после того, как он уже скопировал все файлы на диск, и возникает, когда он пытается запустить исполняемый файл моих пользовательских действий.

Бинарный файл пользовательских действий - это файл с именем InstallCustom.exe, написанный на C ++. Он очень простой, он просто обрабатывает действия Install, Commit, Uninstall и Rollback и ничего не делает, кроме как устанавливает некоторые записи реестра и запускает несколько пакетных сценариев для завершения установки.

Я запустил SXSTrace во время установки, чтобы посмотреть, на чем он отказывает, и получил следующую трассировку:

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = x86
    CultureFallBacks = en-US;en
    ManifestPath = C:\Program Files\MyApp\InstallCustom.exe
    AssemblyDirectory = C:\Program Files\MyApp\
    Application Config File = 
-----------------
INFO: Parsing Manifest File C:\Program Files\MyApp\InstallCustom.exe.
    INFO: Manifest Definition Identity is (null).
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: Find publisher policy at C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1434_none_516c10c30f4aae68.manifest
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC80.CRT\8.0.50727.4053__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.MANIFEST.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
ERROR: Activation Context generation failed.
End Activation Context Generation.

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = x86
    CultureFallBacks = en-US;en
    ManifestPath = C:\Program Files\MyApp\InstallCustom.exe
    AssemblyDirectory = C:\Program Files\MyApp\
    Application Config File = 
-----------------
INFO: Parsing Manifest File C:\Program Files\MyApp\InstallCustom.exe.
    INFO: Manifest Definition Identity is (null).
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: Find publisher policy at C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1434_none_516c10c30f4aae68.manifest
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC80.CRT\8.0.50727.4053__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.MANIFEST.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
ERROR: Activation Context generation failed.
End Activation Context Generation.

Как видите, не удается найти Microsoft.VC80.CRT, dll среды выполнения Visual C ++.

Странно то, что эта среда выполнения уже включена в установщик путем добавления модулей слияния: «Microsoft_VC80_CRT_x86.msm» и «policy_8_0_microsoft_vc80_crt_x86.msm»

Однако я подозреваю, что эти модули слияния фактически не применяются до тех пор, пока не произойдет эта ошибка ...
Но я не смог выяснить, как включить эти необходимые файлы до запуска InstallCustom.exe. Я даже пытался скопировать среду выполнения в каталог, в котором находится файл перед установкой.

Есть ли способ исправить эту проблему? И почему это не будет проблемой для XP и 2000, но для Vista ... Я думаю, что это должно иметь эту среду выполнения.

1 Ответ

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

Вам следует использовать статическую версию CRuntime (если это возможно), лучше всего, чтобы у настраиваемого действия было как можно меньше предпосылок. Это сделает пользовательское действие немного больше (с шагом 10 кБ), но оно того стоит.


Для компиляции с использованием статической библиотеки CRuntime перейдите на Project Properties\C/C++\Code Generation\Runtime Library. Не забывайте, что если вашему exe-файлу нужны другие dll, для которых требуется эта версия CRuntime, им также необходимо скомпилировать, используя статическую версию.

...