misc.log

日常茶飯事とお仕事と

msvcr90.dllについて

私が指摘しわすれていたこともあって、アプリの動作環境に入れなさいと記載されていたVC+ 2008 SP1再頒布パッケージに含まれるDLLが無いという問題が。というわけで、何が何で、ってことをメモっておきます。

msvcr90.dll

Visual C++ 2008 SP1で作られたアプリの動作に必要なライブラリファイル。

所在

VC+ 2008 SP1再頒布パッケージという名前でマイクロソフトからこれを含んだインストーラーが配布されています。

Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/ja-jp/download/details.aspx?id=5582

何が入るか

とりあえず、msvcr90.dllは下記フォルダにできていました。

C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e

C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e


前者はバージョンが「9.0.30729.1」で作成日時が2008年7月29日、後者のバージョンは「9.0.30729.4148」で、作成日時は2009年7月12日でした。両方がパッケージに含まれていたのか、片方は最初から有ったのかについては後で確認します。

DLLだけ導入できるのか?

どうなんでしょうか。念のため、Dependency Walkerを使ってmsvcr90.dllの依存関係を見てみると、こんな感じです。



依存するのはKernel32のみ。ってことはこれだけでもいけそうな感じなんですが。

インストーラーの中身は?

Universal Extractorを使ってexe形式になっている再頒布パッケージをばらしてみました。

  • eula.1041.txt
  • globdata.ini
  • install.exe
  • install.ini
  • install.res.1041.dll
  • vc_red.cab
  • vc_red.msi
  • vcredist.bmp

肝心なものはたぶん「vc_red.cab」ですね。これもバラしてみましょう………。ありゃりゃ。DLLのほかにも、ポリシーやらマニフェストやら、あまり詳しくはよくわかりませんが、いろんなファイルが入ってます(トータル101個)。これは配置するだけじゃたぶんだめですね。

ファイル一覧を表示したところのスクリーンショットはこれ。



マニフェストやらポリシーやら、カタログといった名前がファイル名に入っているファイルは、MFCライブラリを配布する際には必要なものだそうです。

MFCライブラリの再配布(MSDN/VS2008の配置に関するページ)
http://msdn.microsoft.com/ja-jp/library/ms235264(v=vs.90).aspx


ってことはやはり……きちんとマイクロソフトが提供するインストーラーで入れるべきなんですね。実際、ゲームアプリなんかでもインストールの過程で別途このパッケージインストーラーが走ることがあります。やはり、抜き出して再配布ってのができないか、困難なのでしょう。