2010-03-14 5 views
0

J'ai une application de construction avec VS2008 SP1a (9.0.30729.4148) sur Windows 7 x64 qui ne veut pas démarrer sous XP.XP Déploiement problèmes dus à msvcr90.dll en essayant de charger FlsAlloc

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 essaye de charger de KERNEL32.dll - et FlsAlloc est disponible seulement commençant par Vista. Je suis sûr qu'il n'est pas utilisé par l'application.

Comment résoudre ce 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 + Correctif de sécurité)

application est compilée avec _BIND_TO_CURRENT_VCLIBS_VERSION=1

J'ai également défini la version cible droite 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" (process 0xA0) at address 0x00400000. Successfully hooked module. Loaded "c:\windows\system32\NTDLL.DLL" at address 0x7C900000. Successfully hooked module. Loaded "c:\windows\system32\KERNEL32.DLL" at address 0x7C800000. Successfully hooked module. Loaded "c:\program files\app\MFC90.DLL" at address 0x785E0000. Successfully hooked module. Loaded "c:\program files\app\MSVCR90.DLL" at address 0x78520000. Successfully hooked module. Loaded "c:\windows\system32\USER32.DLL" at address 0x7E410000. Successfully hooked module. Loaded "c:\windows\system32\GDI32.DLL" at address 0x77F10000. Successfully hooked module. Loaded "c:\windows\system32\SHLWAPI.DLL" at address 0x77F60000. Successfully hooked module. Loaded "c:\windows\system32\ADVAPI32.DLL" at address 0x77DD0000. Successfully hooked module. Loaded "c:\windows\system32\RPCRT4.DLL" at address 0x77E70000. Successfully hooked module. Loaded "c:\windows\system32\SECUR32.DLL" at address 0x77FE0000. Successfully hooked module. Loaded "c:\windows\system32\MSVCRT.DLL" at address 0x77C10000. Successfully hooked module. Loaded "c:\windows\system32\COMCTL32.DLL" at address 0x5D090000. Successfully hooked module. Loaded "c:\windows\system32\MSIMG32.DLL" at address 0x76380000. Successfully hooked module. Loaded "c:\windows\system32\SHELL32.DLL" at address 0x7C9C0000. Successfully hooked module. Loaded "c:\windows\system32\OLEAUT32.DLL" at address 0x77120000. Successfully hooked module. Loaded "c:\windows\system32\OLE32.DLL" at address 0x774E0000. Successfully hooked module. Entrypoint reached. All implicit modules have been loaded. DllMain(0x78520000, DLL_PROCESS_ATTACH, 0x0012FD30) in "c:\program files\app\MSVCR90.DLL" called. GetProcAddress(0x7C800000 [c:\windows\system32\KERNEL32.DLL], "FlsAlloc") called from "c:\program files\app\MSVCR90.DLL" at address 0x78543ACC and returned NULL. Error: The specified procedure could not be found (127). GetProcAddress(0x7C800000 [c:\windows\system32\KERNEL32.DLL], "FlsGetValue") called from "c:\program files\app\MSVCR90.DLL" at address 0x78543AD9 and returned NULL. Error: The specified procedure could not be found (127). GetProcAddress(0x7C800000 [c:\windows\system32\KERNEL32.DLL], "FlsSetValue") called from "c:\program files\app\MSVCR90.DLL" at address 0x78543AE6 and returned NULL. Error: The specified procedure could not be found (127). GetProcAddress(0x7C800000 [c:\windows\system32\KERNEL32.DLL], "FlsFree") called from "c:\program files\app\MSVCR90.DLL" at address 0x78543AF3 and returned NULL. Error: The specified procedure could not be found (127).

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

+0

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/21418b8a-b7fe-4049-b23a-f5e4941e63db/) dit que je devrais vérifier si les répertoires SDK sur le dessus des répertoires include dans Visual Studio. Je les ai changés mais sans succès. – sorin

Répondre

-1

L'outil Manifest est vraiment bogué et la seule solution fiable consistait à ne pas incorporer le manifeste dans les binaires car l'intégration échoue presque de façon aléatoire. Garder le manifeste à l'extérieur est moche, mais au moins fonctionne toujours.

+0

En outre, Microsoft a abandonné manifeste de VS 2010 :) – sorin

0

Je toujours intégrer le manifeste dans mes DLL et n'ai jamais eu de problème. J'ai seulement rencontré un problème quand j'ai oublié d'incorporer le manifeste. Ensuite, il ne parvient pas à trouver le MSVCR90.dll sur Windows 2008, mais il fonctionne sur les anciennes versions de Windows, ce qui m'a dérouté pendant un moment.

Questions connexes