私が指摘しわすれていたこともあって、アプリの動作環境に入れなさいと記載されていた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
ってことはやはり……きちんとマイクロソフトが提供するインストーラーで入れるべきなんですね。実際、ゲームアプリなんかでもインストールの過程で別途このパッケージインストーラーが走ることがあります。やはり、抜き出して再配布ってのができないか、困難なのでしょう。