8

私は、64ビットアドオンを備えた64ビットOS Windows 7究極のマシンVS2008で作業しています。

32 ビットと 64 ビット、デバッグおよびリリース構成の両方でプロジェクトを正常にビルドできました。64 ビット デバッグが起動しません。エラーが発生します:

プログラム xxx を開始できません アプリケーションの構成が正しくないため、このアプリケーションを開始できませんでした。マニフェスト ファイルでエラーの可能性を確認します。アプリケーションを再インストールすると、この問題が解決する場合があります。その他の小売店については、アプリケーション イベント ログを参照してください。

依存関係ウォーカーを実行しました。再配布可能なパス C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT から Microsoft.VC90.DebugCRT.manifest msvcm90d msvcp90d msvcr90d Microsoft.VC90.DebugOpenMP vcomp90d を追加しました。私のソリューションの bin\debug フォルダーに sll があります。

最後に、依存関係ウォーカーには黄色のマーク (ファイルの欠落) が残っていませんでしたが、それでも次のようなエラーが発生しました。

エラー: 必要な暗黙的または転送された依存関係が少なくとも 1 つ見つかりませんでした。エラー: 暗黙的に依存するモジュールにエクスポート関数がないため、少なくとも 1 つのモジュールに未解決のインポートがあります。エラー: CPU タイプが異なるモジュールが見つかりました。エラー: "e:\xyz.EXE" の Side-by-Side 構成情報にエラーが含まれています。サイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください (14001)。

32 ビット マニフェストには次のように記載されています。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" **processorArchitecture="x86"** publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

一方、64 ビットのデバッグ マニフェストには次のものがあります。

 <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>

私が理解できないのは、デバッグ 32 ビット ビルドが正常に実行されるのはなぜですか?

すでに多くの質問を確認しましたが、実行可能な解決策が見つからないので、助けてください。

4

4 に答える 4

6

私の質問に答えてくれてありがとう。私はついにそれを解決しました、そしてここに解決策があります:-

私のものは Qt ベースの VC++ ソリューションで、アプリはいくつかのサードパーティの dll とライブラリに依存していました。私の仕事は、64 ビット OS で Qt とサードパーティの dll とライブラリをビルドしたアプリケーションに 64 ビットのサポートを提供することでした。

アプリをデバッグ 64 ビット構成で実行しようとすると、CRT エラーが発生しました。次の CRT をアプリケーションの bin フォルダーにコピーした後も、エラーは解決しませんでした。

redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT:

  1. Microsoft.VC90.DebugCRT.manifest
  2. msvcm90d.dll
  3. msvcp90d.dll
  4. msvcr90d.dll

Microsoft.VC90.DebugOpenMP:

  1. vcomp90d.dll

上記の CRT を、Qt およびサードパーティ ライブラリが存在する対応する bin フォルダーに貼り付けたところ、デバッグ 64 ビット モードでアプリを正常に起動できました。

于 2012-02-01T11:02:16.657 に答える
2

「権限昇格」のマニフェストを Delphi コンソール アプリケーションに追加した後、同じ問題が発生しました (32 ビット、Win7 x64 で実行した場合の問題)。この問題は、マニフェスト ファイルに記載されている依存関係に関連していました。

<dependency>
<dependentAssembly>
  <assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    processorArchitecture="*"/>
</dependentAssembly>
</dependency>

マニフェストから削除すると、Side by Side エラーが消えました。

于 2012-09-21T12:45:03.640 に答える
1

依存関係は、実際にはわずかに異なるバージョンが必要なときに dll が見つかったように見えることが多いため、サイド バイ サイドの依存関係には適していません。

sxstrace.exe を使用すると、不足しているものをよりよく把握できます。

http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

通常、イベント ログにはエラーが並んで表示されますが、残念ながら、問題があるということ以外の情報はあまり得られません。

于 2012-01-24T09:30:56.727 に答える