Pregunta

Tengo una aplicación construida con VS2008 Pack 1a (9.0.30729.4148) en Windows 7 x64 que no quieren empezar con XP.

El mensaje es The application failed to initialize properly (0x80000003). Click on OK to terminate the application.. He hablado con depends.exe y encontró que msvcr90.dll no intente cargar FlsAlloc de KERNEL32.dll - FlsAlloc y sólo está disponible a partir de Vista. Estoy seguro de que no es utilizado por la aplicación.

¿Cómo resolver el problema?

El paquete SxS ya está instalado en la máquina de destino - De hecho tengo los 3 versiones de 9,0 SxS (liberación inicial, SP1, y SP1 + parche de seguridad)

aplicación se compila con _BIND_TO_CURRENT_VCLIBS_VERSION=1

También he definido el objetivo versión correcta de Windows en stdafx.h

 #define WINVER 0x0500
 #define _WIN32_WINNT 0x0500

El archivo de manifiesto

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

resultado de depende

  

Started "c: \ archivos de programa \ app \ APP.EXE" (proceso de 0xA0) en la dirección 0x00400000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ NTDLL.DLL" en la dirección 0x7C900000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ Kernel32.dll" en la dirección 0x7C800000. módulo de éxito enganchado.   Cargados "c: \ archivos de programa \ app \ MFC90.DLL" en la dirección 0x785E0000. módulo de éxito enganchado.   Cargados "c: \ archivos de programa \ app \ Msvcr90.dll" en la dirección 0x78520000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ USER32.DLL" en la dirección 0x7E410000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ Gdi32.dll" en dirección de 0x77F10000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ SHLWAPI.DLL" en la dirección 0x77F60000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ ADVAPI32.DLL" en la dirección 0x77DD0000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ RPCRT4.DLL" en la dirección 0x77E70000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ secur32.dll" en la dirección 0x77FE0000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ MSVCRT.DLL" en la dirección 0x77C10000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ COMCTL32.DLL" en la dirección 0x5D090000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ msimg32.dll" en la dirección 0x76380000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ SHELL32.DLL" en la dirección 0x7C9C0000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ OLEAUT32.DLL" en la dirección 0x77120000. módulo de éxito enganchado.   Cargados "c: \ windows \ system32 \ OLE32.DLL" en la dirección 0x774E0000. módulo de éxito enganchado.   Punto de entrada alcanza. Todos los módulos implícitos han sido cargados.   DllMain (0x78520000, DLL_PROCESS_ATTACH, 0x0012FD30) en "C: \ Archivos de programa \ app \ Msvcr90.dll" llama.   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsAlloc") llamada de "c: \ archivos de programa \ app \ Msvcr90.dll" en la dirección 0x78543ACC y devuelve NULL. Error: El procedimiento especificado no se pudo encontrar (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsGetValue") llamada de "c: \ archivos de programa \ app \ Msvcr90.dll" en la dirección 0x78543AD9 y devuelve NULL. Error: El procedimiento especificado no se pudo encontrar (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsSetValue") llamada de "c: \ archivos de programa \ app \ Msvcr90.dll" en la dirección 0x78543AE6 y devuelve NULL. Error: El procedimiento especificado no se pudo encontrar (127).   GetProcAddress (0x7C800000 [c: \ windows \ system32 \ KERNEL32.DLL], "FlsFree") llamada de "c: \ archivos de programa \ app \ Msvcr90.dll" en la dirección 0x78543AF3 y devuelve NULL. Error:. El procedimiento especificado no se pudo encontrar (127)

Debo mencionar que tengo SDK de Windows 7 instalado y configurado como predeterminado SDK.

¿Fue útil?

Solución 2

herramienta de manifiesto es realmente buggy y la única solución fiable era no incrustar el manifiesto en los binarios porque falla la incrustación casi al azar. Mantener el exterior manifiesto es feo, pero al menos siempre funciona.

Otros consejos

Siempre incrustar el manifiesto en mis archivos DLL y nunca he tenido un problema. Sólo encontré con un problema cuando se me olvidó para incrustar el manifiesto. Entonces se produce un error para encontrar el Msvcr90.dll en Windows 2008, pero funciona en las versiones anteriores de Windows, lo que me confundió por un tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top