0

XPで起動したくないWindows7x64上のVS2008SP1a(9.0.30729.4148)でビルドされたアプリケーションがあります。

メッセージはThe application failed to initialize properly (0x80000003). Click on OK to terminate the application.です。確認したところ、KERNEL32.dllからロードしようとしてdepends.exeいることがわかりました。FlsAllocはVista以降でのみ使用できます。アプリケーションでは使用されていないと思います。msvcr90.dllFlsAlloc

問題を解決する方法は?

SxSパッケージはすでにターゲットマシンにインストールされています-実際、私は9.0 SxSの3つのバージョンすべてを持っています(初期リリース、sp1、およびsp1 +セキュリティパッチ)

アプリケーションはでコンパイルされます_BIND_TO_CURRENT_VCLIBS_VERSION=1

また、私は正しいターゲットWindowsバージョンを定義しましたstdafx.h

 #define WINVER 0x0500
 #define _WIN32_WINNT 0x0500

マニフェストファイル

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

依存からの結果

アドレス0x00400000で「c:\ programfiles \ app \ app.EXE」(プロセス0xA0)を開始しました。モジュールを正常にフックしました。アドレス0x7C900000に「c:\ windows \ system32\NTDLL.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C800000に「c:\ windows \ system32\KERNEL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x785E0000に「c:\ programfiles \ app\MFC90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x78520000に「c:\ programfiles \ app\MSVCR90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7E410000に「c:\ windows \ system32\USER32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F10000に「c:\ windows \ system32\GDI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F60000に「c:\ windows \ system32\SHLWAPI.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77DD0000に「c:\ windows \ system32\ADVAPI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77E70000に「c:\ windows \ system32\RPCRT4.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77FE0000に「c:\ windows \ system32\SECUR32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77C10000に「c:\ windows \ system32\MSVCRT.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x5D090000に「c:\ windows \ system32\COMCTL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x76380000に「c:\ windows \ system32\MSIMG32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C9C0000に「c:\ windows \ system32\SHELL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77120000に「c:\ windows \ system32\OLEAUT32.DLL」をロードしました。モジュールを正常にフックしました。ロードされた"c:

Windows SDK 7がインストールされ、デフォルトのSDKとして構成されていることを述べておく必要があります。

4

2 に答える 2

0

私は常にマニフェストをDLLに埋め込み、問題が発生したことはありません。マニフェストを埋め込むのを忘れたときにのみ問題が発生しました。その後、Windows 2008でMSVCR90.dllを見つけることができませんが、古いバージョンのWindowsで動作するため、しばらく混乱していました。

于 2011-06-15T18:50:31.217 に答える
-1

マニフェストツールは本当にバグがあり、唯一の信頼できる解決策は、埋め込みがほぼランダムに失敗するため、マニフェストをバイナリに埋め込まないことでした。マニフェストを外部に保持するのは醜いですが、少なくとも常に機能します。

于 2010-08-09T09:50:25.023 に答える