2009-11-11 8 views
0

J'ai créé un projet d'installation avec VS2005 pour une application que je développe, qui s'installe correctement sous Windows 2000 et XP, mais lorsque j'essaie d'exécuter le programme d'installation Vista, il donne l'erreur suivante:Microsoft VC Runtime Requirement et erreur SXS pour Setup Custom Action dans Vista

There is a problem with this Windows Installer package. A program required for this install to complete could not be run.

Cette erreur se produit à la fin du processus d'installation, après qu'il a déjà copié tous les fichiers sur le disque, et il se produit quand il tente d'exécuter mon actions personnalisées exécutables.

Le binaire d'actions personnalisées est un fichier appelé InstallCustom.exe et est écrit en C++. Il est très basique et ne gère que les actions d'installation, de validation, de désinstallation et de restauration et ne fait rien de plus que de définir des entrées de registre et de déclencher quelques scripts batch pour finaliser l'installation.

j'ai couru SXSTrace lors de l'installation pour voir ce qu'il échouait sur et a obtenu la trace suivante:

================= 
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. 

Comme vous pouvez le voir, il ne parvient pas à trouver Microsoft.VC80.CRT, le moteur d'exécution Visual C++ dll.

La chose étrange est que cette exécution est déjà inclus dans le programme d'installation, en ajoutant les modules de fusion: « Microsoft_VC80_CRT_x86.msm » et « policy_8_0_microsoft_vc80_crt_x86.msm »

Cependant, je soupçonne que ces modules de fusion ne le font pas effectivement être appliqué jusqu'à ce que cette erreur se produit ...
Mais je n'ai pas été en mesure de comprendre comment inclure ces fichiers nécessaires avant les exécutions InstallCustom.exe. J'ai même essayé de copier l'exécution sur le répertoire dans lequel se trouve ce fichier avant l'installation.

Est-il possible de résoudre ce problème? Et pourquoi ce pas serait un problème sur XP et 2000, mais sur Vista ... Je pense qu'il devrait avoir ce temps d'exécution.

Répondre

1

Vous devez utiliser une version statique de CRuntime (si possible), il est recommandé que l'action personnalisée ait le moins possible de prérequis. Cela rendra l'action personnalisée un peu plus importante (dans la 10ème de la plage de Ko) mais ça en vaut la peine.


Pour compiler en utilisant la bibliothèque CRuntime statique goto Project Properties\C/C++\Code Generation\Runtime Library. N'oubliez pas que si votre exe a besoin d'une DLL qui nécessite cette version de CRuntime, il doit également utiliser la version statique.

+0

Ok, mais comment je fais ça. Je ne pouvais pas trouver comment compiler cela dans le binaire statiquement. –

+0

La propriété "Runtime Library" est définie sur "Multi-Threaded DLL", la remplacer par "Multi-Threaded"? –

+0

Il s'avère que "Multi-Threaded" était celui! Merci! –