XP MSVCR90.DLLがFlsallocをロードしようとする問題の展開
-
19-09-2019 - |
質問
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の古いバージョンで動作し、しばらく混乱しています。