Question

J'ai une application construite avec VS2008 SP1a (9.0.30729.4148) sur Windows 7 x64 qui ne veut pas démarrer sous XP.

Le message est The application failed to initialize properly (0x80000003). Click on OK to terminate the application.. J'ai vérifié avec depends.exe et a constaté que msvcr90.dll ne cherche à charger FlsAlloc de KERNEL32.dll - et FlsAlloc est disponible uniquement à partir de Vista. Je suis sûr que ce ne soit pas utilisé par l'application.

Comment résoudre le problème?

Le paquet SxS est déjà installé sur la machine cible - En fait, j'ai les 3 versions de 9.0 SxS (version initiale, sp1 et sp1 + patch de sécurité)

L'application est compilé avec _BIND_TO_CURRENT_VCLIBS_VERSION=1

I également décrit la bonne cible version de Windows sur stdafx.h

 #define WINVER 0x0500
 #define _WIN32_WINNT 0x0500

fichier Manifest

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 <security>
 <requestedPrivileges>
  <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
  </requestedPrivileges>
  </security>
  </trustInfo>
 <dependency>
 <dependentAssembly>
  <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.4148" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
  </dependentAssembly>
  </dependency>
 <dependency>
 <dependentAssembly>
  <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.30729.4148" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
  </dependentAssembly>
  </dependency>
</assembly>

Résultat dépend

  

Started "c: \ program files \ app \ app.exe" (processus 0xA0) à l'adresse 0x00400000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ NTDLL.DLL" à l'adresse 0x7C900000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ KERNEL32.DLL" à l'adresse 0x7C800000. Module avec succès accroché.   Loaded "c: \ program files \ app \ MFC90.DLL" à l'adresse 0x785E0000. Module avec succès accroché.   Loaded "c: \ program files \ app \ msvcr90.dll" à l'adresse 0x78520000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ USER32.DLL" à l'adresse 0x7E410000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ GDI32.DLL" à l'adresse 0x77F10000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ SHLWAPI.DLL" à l'adresse 0x77F60000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ ADVAPI32.DLL" à l'adresse 0x77DD0000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ rpcrt4.dll" à l'adresse 0x77E70000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ SECUR32.DLL" à l'adresse 0x77FE0000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ MSVCRT.DLL" à l'adresse 0x77C10000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ COMCTL32.DLL" à l'adresse 0x5D090000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ msimg32.dll" à l'adresse 0x76380000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ SHELL32.DLL" à l'adresse 0x7C9C0000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ OLEAUT32.DLL" à l'adresse 0x77120000. Module avec succès accroché.   Loaded "c: \ windows \ system32 \ OLE32.DLL" à l'adresse 0x774E0000. Module avec succès accroché.   atteint Entrypoint. Tous les modules implicites ont été chargés.   DllMain (0x78520000, DLL_PROCESS_ATTACH, 0x0012FD30) dans "c: \ program files \ app \ msvcr90.dll" appelé.   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ Kernel32.DLL], "FlsAlloc") a appelé de "c: \ program files \ app \ msvcr90.dll" à l'adresse 0x78543ACC et retourné NULL. Erreur: Impossible de trouver le mode opératoire spécifié (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ Kernel32.DLL], "FlsGetValue") a appelé de "c: \ program files \ app \ msvcr90.dll" à l'adresse 0x78543AD9 et retourné NULL. Erreur: Impossible de trouver le mode opératoire spécifié (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ Kernel32.DLL], "FlsSetValue") a appelé de "c: \ program files \ app \ msvcr90.dll" à l'adresse 0x78543AE6 et retourné NULL. Erreur: Impossible de trouver le mode opératoire spécifié (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ Kernel32.DLL], "FlsFree") a appelé de "c: \ program files \ app \ msvcr90.dll" à l'adresse 0x78543AF3 et retourné NULL. Erreur:. N'a pu être trouvée La procédure spécifiée (127)

Je dois mentionner que j'ai SDK Windows 7 installé et configuré comme SDK par défaut.

Était-ce utile?

La solution 2

Outil Manifest est vraiment buggy et la seule solution fiable est de ne pas intégrer le manifeste dans les binaires parce que l'incorporation échoue presque au hasard. Garder l'extérieur manifeste est laid, mais au moins fonctionne toujours.

Autres conseils

Je le manifeste toujours intégrer dans mes DLL et ne l'ai jamais eu un problème. Je ne suis tombé sur un problème quand j'ai oublié d'intégrer le manifeste. Ensuite, il ne trouve pas le msvcr90.dll sur Windows 2008, mais il fonctionne sur les anciennes versions de Windows, ce qui m'a confondu pendant un certain temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top