2009-05-18 3 views
2

特定のバージョンのMSVCR80.dll(MS Visual Cランタイム)に依存するプロジェクトがあり、問題が発生しています。特定のシステム構成によっては、私のアプリは、常にそのファイルの正しいバージョンを取得していません。その名前のファイルを見つけるためにどのような道が必要なのかはちょっと疑問に思っていましたが、それは必ずしも正しいとは限りません...MS C++ランタイムをVS2005で生成したMSI

VS2005のデプロイメントプロジェクトを作成するときには、私のアプリはです。いつも私が提供したランタイムを使用しますか?プロジェクトにランタイムファイルを追加すると、マージモジュールの作成についての質問がありますが、実際に何が行われているのかはわかりません。そしてそれを作ることに関係なく、問題は残っています。

答えて

2

マーティン・リヒターはCodeProjectの上でそのことについての記事を書いた: Create projects easily with private MFC, ATL and CRT assemblies

このソリューションは、あなたのMSIパッケージではなく、CRTファイルを使用するアプリケーションに依存しません。

+0

残念ながら、私は本当にアプリケーションを変更することはできません... –

0

インストール後にアプリケーションが動作しない場合、または動作しないインストールの一部として使用しているDLLであるかどうかわかりません。

C/C++ランタイムの新バージョンは、Win32アセンブリまたはサイドバイサイドインストールとしてインストールされています。これは、ファイルがのC:\ Windows \ winsxs - のWin32に相当するGACのフォルダに入っていて、同じファイルのいくつかのバージョンが共存できることを意味します。 のVisual Studio 2008分の2005でコンパイルさ

アプリケーションは、バイナリにマニフェストファイルを置くと、このマニフェストはに結合する何サイド・バイ・サイドのランタイムのバージョンを指定します。 MSVCR80.dllをEXEの隣に置いても、system32の中に置いても問題ありません。EXEに埋め込まれたマニフェストは、C:\ Windows \ winsxsからファイルをロードします。

これはすべて「完全円」です。昔、ランタイムはSystem32に行きました。これにより、オリジナルのdll-hell:アプリケーションがお互いのグローバルランタイムファイルを上書きしました。このすべてを解決するために、各アプリケーションに「変更を隔離する」というアイデアがありました。したがって、新しいアプローチは、ランタイムファイルのローカルコピーをEXEの隣に分離することでした。これで全く新しい問題が発生しました。隔離されたDLLのセキュリティ更新プログラムがどのように展開されているかを確認するにはどうすればよいですか?ほとんどの場合、これは起こりませんでした。ローカルの安全でないdllで多くのアプリケーションを実行していました。じゃあ何をすればいいの?この決定は、dll-hellの第2の到来:side-by-sideアセンブリアプローチを導入することでした。このアプローチでは、ランタイムはローカルではなく、グローバルであり、サイドバイサイドのインストールをサポートするという重要な違いがあります。このようにして、理論上、アプリケーションはお互いのランタイムDLLを上書きすることなく機能することができます。

これは、「ランタイム展開を複雑にする方法」の簡単な要約です。私はまだそれが可能であることを肯定的ではありませんが、あなたは静的にランタイムにリンクすることができますかどうかをチェックしましたか?時々古い学校が本当に簡単です...

関連する問題