質問

XPで開始したくないWindows 7 X64に、VS2008 SP1A(9.0.30729.4148)のアプリケーションビルドがあります。

メッセージはです The application failed to initialize properly (0x80000003). Click on OK to terminate the application.. 。私はチェックしました depends.exe そしてそれを見つけました msvcr90.dll ロードしようとします FlsAlloc kernel32.dllから - およびflsallocはVistaからのみ開始します。アプリケーションでは使用されていないと確信しています。

問題を解決する方法は?

SXSパッケージは既にターゲットマシンにインストールされています - 実際、9.0 SXS(初期リリース、SP1、およびSP1+セキュリティパッチ)の3つのバージョンすべてがあります。

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

また、適切なターゲットウィンドウバージョンを定義しました 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>

依存から結果

"c: program files app app.exe"(プロセス0xa0)をアドレス0x00400000で開始しました。正常にフックされたモジュール。アドレス0x7C900000に「c: windows system32 ntdll.dll」をロードしました。正常にフックされたモジュール。アドレス0x7C800000に「c: windows system32 kernel32.dll」をロードしました。正常にフックされたモジュール。アドレス0x785E0000に「C: Program Files App Mfc90.dll」をロードしました。正常にフックされたモジュール。アドレス0x78520000に「c: program files 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」をロードしました。正常にフックされたモジュール。アドレス0x774E0000に「c: windows system32 ole32.dll」をロードしました。正常にフックされたモジュール。エントリーポイントが到達しました。すべての暗黙のモジュールがロードされています。 dllmain(0x78520000、dll_process_attach、0x0012fd30)in "c: program files app msvcr90.dll" in Call。 getProcAddress(0x7C800000 [c: windows system32 kernel32.dll]、 "flsalloc")は、アドレス0x78543ACCで「c: program files app msvcr90.dll」から呼び出し、nullを返しました。エラー:指定された手順を見つけることができませんでした(127)。 getProcAddress(0x7C800000 [c: windows system32 kernel32.dll]、 "flsgetvalue")は、アドレス0x78543ad9で「c: program files app msvcr90.dll」から呼び出し、nullを返しました。エラー:指定された手順を見つけることができませんでした(127)。 getProcAddress(0x7C800000 [c: windows system32 kernel32.dll]、 "flssetValue")は、アドレス0x78543Ae6で「c: program files app msvcr90.dll」から呼び出し、nullを返しました。エラー:指定された手順を見つけることができませんでした(127)。 getProcAddress(0x7C800000 [c: windows system32 kernel32.dll]、 "flsfree")は、アドレス0x78543af3で「c: program files app msvcr90.dll」から呼び出し、nullを返しました。エラー:指定された手順を見つけることができませんでした(127)。

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

役に立ちましたか?

解決 2

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top