VisualStudio6からVisualStudio2008に切り替えてから、バージョンを気にしないように、マニフェストファイルとともにMFC90.dllとmsvc[pr]90.dllをプライベートサイドバイサイド構成で使用しています。またはそれらをシステムにインストールします。
SP1より前では、これは正常に機能していました(そして、開発者のマシンでも正常に機能します)。SP1後のテストを行ったので、昨日の朝から髪を抜いてきました。
まず、NSISインストーラースクリプトが、redistフォルダーからdllとマニフェストファイルをプルします。アプリはまだRTMバージョンにリンクしているため、これらは正しくありませんでした。
そこで、すべてのプロジェクトにdefine forを追加して_BIND_TO_CURRENT_VCLIBS_VERSION=1
、それらがredistフォルダー内のSP1 DLL(または新しいサービスパックがリリースされたときの後続のDLL)を使用するようにしました。これを見つけるのに何時間もかかりました。
コンパイルから中間ファイルフォルダーに生成されたマニフェストファイルを再確認したところ、9.0.30729.1SP1のバージョンが正しくリストされています。私はダブルチェックとトリプルチェックをクリーンなマシンに依存しています:それはすべてエラーなしでローカルdllにリンクしています。
アプリを実行しても、次のエラーが発生します。
アプリケーションを正しく初期化できませんでした(0xc0150002)。[OK]をクリックして、アプリケーションを終了します。
私がグーグルやマイクロソフトで行った検索のどれも私の特定の問題に関連するものを思い付きませんでした(しかし、このエラーメッセージで2005年に戻ったヒットがあります)。
SP1で同様の問題が発生した人はいますか?
オプション:
- 問題を見つけて修正し、正常に機能するようにします(推奨)
- redistをインストールします
- 古いRTMdllとマニフェストファイルを掘り起こし、#defineを削除して現在のものを使用します。(Microsoftがあなたのredistフォルダーからそれらを爆破するので、私は以前のインストーラービルドでそれらを持っています!)
編集:定義をオフにして(RTM dllへのリンク)再構築を試みましたが、RTMdllがフォルダーにインストールされている限り機能します。SP1 dllがドロップインされると、次のエラーが発生します。
c:\ Program Files \ ... \ ... \ X.exe
アプリケーションの構成が正しくないため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。
他の誰もこの問題に対処する必要はありませんでしたか?
編集:ニヤリと笑うために、テストマシンにVS2008SP1用のvcredist_x86.exeをダウンロードして実行しました。それは動作します。SP1DLLを使用します。そして私のRTMリンクアプリ。ただし、SP1より前に機能していたプライベートサイドバイサイドディストリビューションではありません。