2011-01-02 8 views
3

ここに私の設定です:側の狂気によってサイド - 同じコンピュータ上で実行されているバイナリ

  • コンピュータA - Windows 7の、Win7の互換性のためにパッチを適用MSのVisual Studio 2005(8.0.50727.867)
  • コンピュータB - Windowsは、 XP SP2、MS Visual Studio 2005のインストール(8.0.50727.42)
  • 私のプロジェクトは、いくつかの外部依存関係(ビルド済みのDLL - に作成したり、インターネットからダウンロードしたのいずれか)がある

、ソースからビルドされたDLLのカップルとo ne実行可能ファイル。私はほとんどA上に開発しており、すべてそこに問題ありません。ある時点で私はコンピュータBでプロジェクトを構築しようとし、出力済みのフォルダにビルド済みのDLLをコピーします。アプリケーションのすべてが罰金のビルドが、私のアプリケーションを起動しようとしている私は

を取得し、適切に(0xc0150002)が初期化に失敗しました....

イベントログには、これらの2が含まれています

依存アセンブリMicrosoft.VC80.CRTが見つかりませんでした。最後にエラーが発生しました参照アセンブリがシステムにインストールされていません。

プラスもう少し面白い

アクティブ化コンテキストの生成 some.dllに失敗しました。参照エラーメッセージ: 操作が正常に完了しました。

この時点で私は私のグーグル・フーをしようとしたが、無駄にしています - 事実上すべてのヒットは Visual Studioがインストールされずにマシン上でバイナリを実行している程度です。しかし、私の場合、実行ファイルは作成されたコンピュータ上で実行されません。

次のステップは、依存関係ウォーカーを試してみました、それがさらに私を困惑 - 同じボックス上のソースから構築された私のDLLがMSVCR80.DLLMSVCP80.DLLを見つけることができません、しかし、実行可能ファイルは、私が開いたとき、すなわち、これら2つのDLLに関してで大丈夫のようですDependency Walkerの実行ファイルにはMSVC?80.DLLがあることが示されていますが、自分のDLLの1つを開いたときにはそれを表示できません。それは私がアイデアから完全に外れているので、私はあなたに頼んでいます。親愛なるstackoverflow :)

私は全体的に少しぼやけていると認めます。また評価されます。

+1

答えはあなたの質問です、バージョン番号の不一致に注意してください。 Bを更新する必要があります。 –

答えて

3

あなたの質問は、あなたの問題に対する答えを持っています。コンピュータAはバージョン8.0.50727.867のVCランタイムを持っており、コンピュータBは、唯一のバージョン8.0.50727.42を持っています。

ライブラリは、コンピュータAにビルドしてあり、VCランタイムのバージョン867に依存しています。これらはライブラリに埋め込まれたマニフェストにあります。これらのライブラリにはランタイムのバージョン867が必要ですが、バージョン42のみです。

VCランタイムアセンブリの依存関係を解決するには、コンピュータ86Bのバージョン867のVCランタイム再配布可能ファイルをインストールする必要があります。しかし、両方のコンピュータで同じバージョンを使用するように、コンピュータBのVisual Studioを更新することをお勧めします。さらに、両方のコンピュータにVisual Studio 2005 SP1をインストールし、this security update to SP1をインストールしてください。後者をインストールすると、ライブラリはバージョン8.0.50727.4053に依存します。

1

それは問題が両方のマシンにインストールされているCRTランタイムの異なるバージョンに関連している可能です。これを確認するために静的にリンクされたCRTランタイムを使用するようにすべてのモジュールを構築することは可能ですか?

+0

@sbkがこのルートに進むと、CRT用のセキュリティ修正がリリースされるため、更新されたビットを用意する必要があることに注意してください。それは必ずしも悪いことではありませんが、おそらく呼び出す価値があります。 :) – paulcam

0

最初私は1台のマシン上でプロジェクトをビルドしてから、別のマシンに移動するとき、彼らに

0

をロードするダミーのプロジェクトを準備することによって構築済みのDLLは、私は最近、エラーの同じタイプを持っていたことを確認したいです。ここで最大の原因は、バイナリコンポーネントの1つのデバッグ設定です。つまり、MSVCは、同じランタイムライブラリ、デバッグまたはリリースでビルドされているすべてのDLL/EXEのかなり厳しい要件を満たしています。そうしないと、一緒に動作しません。

このような状況が発生したときにも、コンパイルがうまくいく傾向がありますが、実行しようとすると、非常にわかりにくいエラーメッセージが表示されます。

ビルドするすべてのモジュールが同じ設定を使用するようにして、ビルドチェーン全体をデバッグまたはリリースする必要があります。このエラーには、他のライブラリの不一致も含まれる可能性があります。そのため、構築しているマシンでMSVCがまったく同じバージョンであることを確認してください。

関連する問題