2010/09/12

7-Zipで開けないアーカイブを開いてみた

Inspiron 640mで動いているWindows VistaではZIP等アーカイブファイルの展開に7-Zipを使っています。

個人的なWindows環境ではlhasaやlhaplusといったツールも以前は使っていたのですが、個々のプログラムではなくて、LZH形式自体の脆弱性が知られるようになってからはアンインストールしてしまいました。

7-Zipは圧縮効率とスピードとのバランスが気にいっているのですが、たまたまVista環境でうまく展開できないファイルを見つけたので他のプログラムを試す機会を得ました。

展開できないファイルとは…。

あまり大きな声ではいいたくないのですが、Vista機に昔を懐しんでDB2 Express-C 9.7.2 for Windows (ファイル名:db2exc_972_WIN_x86.exe) をインストールしようとしました。 これは自己解凍形式のEXEファイルなのですが、展開に失敗し、インストーラが立ち上がらない状態になってしまいました。

VMWare上のWindowsXPでは展開できるので、自分のVista環境のDLLやら過去に導入した何かが影響していると考えるのが妥当そうです。

DB2 Express-Cは無償版ですし、Forum等を検索をしても似たような事象は発見できなかったので、今回は自力で解決策を探ってみました。

とりあえず展開できないか、いろいろ試してみる

いまになって振り替えると、Windows版のlddコマンドでもあればリンクされているDLLを疑う事もできたのかなと思います。残念ながらWindows周りは詳しくないので、直線的に突進するしかありませんでした。

ファイル自身を実行する自己解凍機能がうまく動いていないようだったので、ファイルの拡張子を .exe から .zip へ手動で変更して、7-Zipで展開を試みました。

展開自体は行なわれたのですが、うまくいかず、最終的に展開に失敗したファイル群がレポートされるという結果になりました。

ただ、自己解凍形式のファイルであったも任意のアーカイバで展開できる事がわかったので、他のプログラムを探す事にしました。

7-Zipよりもう少し信頼性のあるアーカイバを探す

7-Zip自身がよく使われているので、これよりも確実に動きそうなフリー、もしくは、オープンソースなアプリケーションはないように思えました。

ZIP形式の由来はWikipediaによると、最初に PKWareという会社が開発し、現在はWinZipという会社と争うように暗号化などに対応した製品版の開発・販売を行なっている模様です。

そういえば以前いた会社ではWinZipが使えたなぁと思いつつ、ここら辺の製品が使えないか調べてみました。

最終的に圧縮ができない展開専用のアプリケーション ZIP Reader を、PKWareの Downloadsエリアで発見しました。

売り物ではないからか、 Products エリアにはリンクがないので、最初は見落したんですけどね。

ZIP Readerを試す

先ほどの拡張子を変更した、 db2exc_972_WIN_x86.zip ファイルをZIP Readerで展開すると無事に"db2exc_972_WIN_x86"フォルダが作られ、全ファイルが展開されました。

7-Zipではサイズがゼロだったreadmefirst.txtファイルもちゃんと読む事ができます。

この中のsetup.exeを実行して無事にVista機にDB2 Express-C 9.7.2を導入する事ができました。

さいごに

原因が不明なので、この結果だけでは「7-Zipを止めて、ZIP Readerを使おう」とはいえなそうです。

やはりldd的なコマンドを使って原因がDLLにないか、時間をみつけて確認することにしましょう。

DB2自体は慣れているせいもあって、端末からのテーブル作成などはすぐにできました。

LDAPサーバみたいに郵便番号データでも入れて、検索アプリを作ってみることにしましょう。

でもInterbaseをベースにしているFirebird 2.5が出たら、そっちに夢中になるかもしれません…。

2 件のコメント:

Tom さんのコメント...

Windowsだとlddの代わりにこんなのがあります.
http://www.dependencywalker.com/

たまに使う場面って出ますよね.こういうの.

YasuhiroABE さんのコメント...

情報ありがとうございました。

結局のところDLL周りは問題なさそうで、MSが配布しているSysinternalSuiteのProcmon.exeというのでトレースを眺めているところです。