Tatsu still writes something... Fourth season

これからも私はなにかをしてなにかを書く

はしごを外された

MS11-025 を入れると 98/Me/NT/2000でソフトが動かなくなる件 その2(黒翼猫のコンピュータ日記 2nd Edition)にあるように、MS11-025を入れたVisual Studio 2008でMFCをスタティックリンクしたプログラムをコンパイルするとWindows 2000で起動しないプログラムができるという事象が発生した。

拙作でMFCをスタティックリンクしていて、Windows 2000をサポートしているプログラムとしてはBookSyncがある。
BookSyncはWindows 2000以降をサポートしているが、Windows 2000でネットにつなぐのはもはや危険なので、次のバージョンでWindows 2000のサポートを外そうかと考えた。

そう思って、今日復活したWindows 7マシンのMS11-025を入れたVisual Studio 2008でBookSyncをコンパイルしてみたら、とんでもないことが起こった。


開発中の次期バージョンのリリース版をコンパイルしたサイズを挙げると下記のようになった。
MS11-025を入れる前のVisual Studio 2008: 756,224 Bytes
MS11-025を入れた後のVisual Studio 2008:1,982,464 Bytes
なんと、倍以上のサイズである。これはさすがに馬鹿らしいし、ランタイムの面倒を見るのも面倒なので、MFCをダイナミックリンクしたバージョンも作ってみた。
MS11-025を入れた後のVisual Studio 2008(MFCダイナミックリンク):527,872 Bytes

MFCのスタティックリンクの有無で1.4MBも違うことから、MFCが1.4MBも食っていることになる。
どうしたらこんなにでかくなるのかわからないが、こんなにサイズが増えるとダウンロードを躊躇する人も出てくるのではないかと思う。
ファイルサイズを小さくするためとWindows 2000でも動作するようにするためにMFCをダイナミックリンクするようにすれば、今度はユーザーにランタイムをダウンロードさせる手間がかかる上、Webページなどでのフォローの手間がかかる。
根本的に対処するため、MFCを使うのをやめるとなるとWin32 APIで一つ一つ書くにしても、他のライブラリに乗り換えるにしても手間がかかるというものである。Visual Studio Express版でもプログラムを作れるようになるのは金銭的には魅力的ではあるが。

どちらにしても、悩ましい事態であり、はしごを外された格好である。
9年前、Visual C++に当たり前にMFCがついていたころの決定がここに来て影響するとは。


BookSyncをVisual C++ 6.0 Standardで公開していたころのように、要ランタイムという形に戻すかどうかはまだ決めてないけど、要ランタイムとした場合に関係するランタイムのダウンロードサイトをメモ代わりに挙げてみる。

まずは、Microsoft Visual C++ 2008 SP1のランタイム。
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
お次は、Windows 2000で適用可能なパッチ。
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム
最後は、Windows 2000には対応しないMFCの最新のパッチ。
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラム

さて、どうするかなぁ。