Domanda

Ho un'applicazione costruire con VS2008 SP1a (9.0.30729.4148) su Windows 7 x64 che non vuole iniziare sotto XP.

Il messaggio è The application failed to initialize properly (0x80000003). Click on OK to terminate the application.. Ho controllato con depends.exe e ha scoperto che msvcr90.dll non provare a caricare FlsAlloc da KERNEL32.dll - e FlsAlloc è disponibile solo a partire con Vista. Sono sicuro che non è utilizzata dall'applicazione.

Come risolvere il problema?

Il pacchetto SxS è già installato sul computer di destinazione - In realtà ho tutte e 3 le versioni di 9.0 SxS (versione iniziale, SP1 e SP1 + patch di sicurezza)

L'applicazione è compilato con _BIND_TO_CURRENT_VCLIBS_VERSION=1

Inoltre ho definito il bersaglio giusto versione di Windows sul stdafx.h

 #define WINVER 0x0500
 #define _WIN32_WINNT 0x0500

file manifesto

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

Risultato da dipende

  

Started "c: \ program files \ app \ app.exe" (processo 0xA0) a indirizzo 0x00400000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ NTDLL.DLL" all'indirizzo 0x7C900000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ KERNEL32.DLL" all'indirizzo 0x7C800000. modulo correttamente agganciato.   Loaded "c: \ program files \ app \ MFC90.DLL" all'indirizzo 0x785E0000. modulo correttamente agganciato.   Loaded "c: \ program files \ app \ Msvcr90.dll" all'indirizzo 0x78520000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ USER32.DLL" all'indirizzo 0x7E410000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ GDI32.DLL" a indirizzo 0x77F10000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ SHLWAPI.DLL" all'indirizzo 0x77F60000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ ADVAPI32.DLL" all'indirizzo 0x77DD0000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ RPCRT4.DLL" all'indirizzo 0x77E70000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ Secur32.dll" all'indirizzo 0x77FE0000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ MSVCRT.DLL" all'indirizzo 0x77C10000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ COMCTL32.DLL" all'indirizzo 0x5D090000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ MSIMG32.DLL" all'indirizzo 0x76380000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ SHELL32.DLL" all'indirizzo 0x7C9C0000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ OLEAUT32.DLL" all'indirizzo 0x77120000. modulo correttamente agganciato.   Loaded "c: \ windows \ system32 \ OLE32.DLL" all'indirizzo 0x774E0000. modulo correttamente agganciato.   Entrypoint raggiunto. Tutti i moduli impliciti sono stati caricati.   DllMain (0x78520000, DLL_PROCESS_ATTACH, 0x0012FD30) in "c: \ program files \ app \ Msvcr90.dll" chiamato.   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsAlloc") chiamato da "c: \ programmi \ app \ Msvcr90.dll" all'indirizzo 0x78543ACC e restituito NULL. Errore: La procedura specificata non è stata trovata (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsGetValue") chiamato da "c: \ programmi \ app \ Msvcr90.dll" all'indirizzo 0x78543AD9 e restituito NULL. Errore: La procedura specificata non è stata trovata (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsSetValue") chiamato da "c: \ programmi \ app \ Msvcr90.dll" all'indirizzo 0x78543AE6 e restituito NULL. Errore: La procedura specificata non è stata trovata (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsFree") chiamato da "c: \ programmi \ app \ Msvcr90.dll" all'indirizzo 0x78543AF3 e restituito NULL. Errore:. La procedura specificata non è stata trovata (127)

Devo dire che ho Windows SDK 7 installato e configurato come SDK di default.

È stato utile?

Soluzione 2

strumento manifesto è davvero buggy e l'unica soluzione affidabile è stato quello di non incorporare il manifesto nei binari perché l'incorporamento fallisce quasi in modo casuale. Mantenere l'esterno manifesto è brutto, ma almeno funziona sempre.

Altri suggerimenti

Ho sempre incorporare il manifesto nei miei DLL e non ho mai avuto un problema. Mi sono imbattuto in un problema solo quando ho dimenticato di incorporare il manifesto. Poi non riesce a trovare il Msvcr90.dll su Windows 2008, ma funziona su versioni precedenti di Windows, il che mi ha confuso per un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top