■■INSTALL改造ノート 神田公生さんの「アプリケーションインストーラ for Win95」inst_w95 V1.15 をベースにして、不具合修正と機能追加を行いました。その作業記録です。 ■改造概要 ・神田さんがベースにした HIDEINST v1.0 が、v1.3 にバ−ジョンアップして  いたので、その差分を取り込む。コピー先に w!, s! が記述可能になった。 ・Folder= 指定にて、多重階層フォルダを許す。  ルート直下や、深いフォルダ階層へのインストールが可能になった。 ・InstallKey= 指定と Menu= 指定を追加する。  任意の位置へのメニュー登録や、複数アプリの同一メニュー登録が可能になった。 ・RemoveNone=1 指定を追加する。  インストール時にコピーしたファイル以外を、アンインストールでは  一切削除しない(削除の問い合わせもしない)ことが可能となった。  共通フォルダに複数のアプリケーションをインストールする場合に有効な  機能である。 ・メニュー登録先をユーザが選択できるようになった。 ・[Group]セクションにて、アイコン番号や作業フォルダ指定を可能とした。 ・日本語・英語対応を、完全にリソース化する。  さらに中国語(繁体字 Big5)のリソースを追加した。さらなる言語も追加可能。  ※リソース募集中 ・メニュー項目、各ショートカットに任意のアイコンを設定できるようになった。 ■ToDo ・Menuの選択コンボボックスにて、全てのメニューフォルダを選択項目に  としているが、深いメニュー階層まで選択項目にする意味が無いように思う。  ダイアログ上でのコンボボックスの配置は検討の余地あり。 ・アクセサリの下へメニューを登録できる必要は無いのではないか。 ・メニューのAllUser対応 -------------------------------------------------------------------------- ■1.24.2 Dec. 3, 2002 ソース上からNT3.51サポートコードを除去した。 ■1.24.1[beta1] Sep. 25, 2002 doxygen用にコメントを更新した。また変数名を改名した。 beta0とのバイナリ一致確認済み。 ■1.24.0[beta0] Aug. 27, 2002 アンインストール完了後の「アプリケーションの追加と削除」の一覧更新が うまくいくようにした。従来は、一覧リストに削除済み項目が消え残っていた。 デスクトップ・スタートアップ・デフォルトメニューのショートカットについて、 ショートカット先、アイコン、作業フォルダを Shortcut= で指定できるようにした。 従来は、それらが以下のように固定されていた。 ショートカット先: 1番目のコピーファイル アイコン : コピーファイルの0番目のアイコン(または関連付けアイコン) 作業フォルダ : インストール先フォルダ w!,s!,d!,m!パスマクロ展開機能を、コピー先指定と作業フォルダ指定で共通化し、 さらにアイコンファイルやショートカット先指定にも使用できるようにする。 ※ドキュメントが未整備のためbata0として限定公開する ■1.23.0 Jun. 18, 2002 メニュー項目のアイコンとして、別ファイルのアイコンを指定できるようにした。 ■1.22.0 Oct. 22, 2001 中国語(繁体字 Big5)のリソースを追加した。 各言語に対応したインストール設定ファイル名は以下の通り。 installj.inf 日本語(Shift_JIS) installe.inf 英語 installzt.inf 中国語(繁体字 Big5) 設定ファイルを install.inf → install[e/j/zt].inf → installe.inf の順で探すようにした。 ■1.21.0 Aug. 19, 2001 フォルダ選択をSHBrowseForFolderで行うようにした。 副作用としてネットワークボタンを見せるかどうかの問題も自然解消した。 ■1.20.6 Release May. 20, 2001 Windows Me でも動作を確認。 Windows 95/95A/95B/98SE/Me/NT4/2000 で動作確認がとれたので、ベータ期間終了。 リリース版を生成する。リソースから"beta"を除去し、著作権年号を2001に改めた。 ■1.20 beta6 Oct. 20, 2000 infの[Group]セクションのエントリ文字列にて、? の前後に空白を許すようにした。 ■1.20 beta5 Oct. 17, 2000 beta3でのGetDiskFreeSpaceExを利用するようにしたが、 インポートライブラリを使って直接呼び出していたため、 Windows95/95A ではインストーラが起動時にインポートエラーが発生していた。 関数ポインタ間接で呼び出すように修正した。 ■1.20 beta4 Oct. 16, 2000 HIDEINST v1.1〜v1.3 の差分を取りこむ、、、つもりだったが 差分のメッセージの誤記は訂正済み、Folder=のルート対応は独自に実現済のため、 取りこむ部分がなかった。 アンインストール時に非インストールファイルを一切削除しない設定 RemoveNone=1 を追加する。 ■1.20 beta3 Oct. 9, 2000 メニューにアンインストールコマンドが登録されたかどうかの、 判定が手抜きだったので修正した。 インストール先にUNC指定(\\server\service\dir\)を許すようにした。 2GB以上のディスクにおいて、空き容量チェックが正確ではなかった。 これは Win32API GetDiskFreeSpace API の不具合であるため、 GetDiskFreeSpaceEx があればそれを使うように修正した。 作業フォルダの変数指定に対応した。 d! デスクトップ m! マイドキュメント w! WINDOWSフォルダ バージョン情報の最新版公開先を http://hp.vector.co.jp/authors/VA002803/install-ej.html に変更した。 ■1.20 beta2 Oct.6,2000 バージョン情報の神田さんの名前が間違っていたので訂正した。 バージョン情報の製品名を "Install E/J" とした。 バージョン表示ダイアログの[X]でダイアログが閉じない不具合を修正した。 自己削除のためのWININIT.INIへの書きこみでメモリリークがあったので修正した。 また、Win32APIの使い方を改善した。 アンインストールでFindFileのハンドルを閉じる前にフォルダを削除しようと していたため、NT4/2000 では削除が失敗していた。正しく閉じるように修正した。 [Group]セクションにて、アイコン番号指定と、作業フォルダ指定を可能にした。 [Working Folder]は廃止した。 ■1.20 beta1 Oct.3,2000 バージョン情報ダイアログを充実させた。 アクセサリ名の取り出しキーが誤っていたので訂正した。 wininit.ini の読み書きをReadPrivateProfileSection()で行うようにした。 Menu登録先をプロパティシート上のコンボボックスにて編集・選択可能にした ■fix7 Sep.29,2000 ファイルバージョン情報をリソースに追加した。 バージョン表示をメッセージボックスからダイアログにした。 表示するバージョン文字列は、ファイルバージョン情報リソースから取り出すようにした。 Folder=に多重階層フォルダを指定できるようにした。 InstallKey=の指定を追加した。 Menu=の指定を追加した。 ■fix6 Sep.23,2000 コーディングの改善。 szOpen[]の使い方を賢くして fOpenフラグを不要にした ファイルの存在確認は GetFileAttributes で行うようにした ■fix5 Sep.22,2000 HIDEINST V1.1 との完全マージ。 ProgressDlgProc の関数定義位置を移動し、HIDEINST 1.1 と同じ順序にした。 HIDEINSTのソース構成に似せるため、ソースを分割した。 指定フォルダの存在チェック処理の誤りを修正した。 サブフォルダへのコピーが機能しなくなっていたので修正した。 不要となった変数の除去。 ■fix4 Sep.19,2000 インストーラ実行ファイル(exe)と、インストーラ情報ファイル(inf)を、 インストール先にコピーする際に、頭にを付加するのをやめた。 Folder名は一意であるため、インストール先に同名ファイルが存在する 可能性はかなり低いが、ゼロではない。よってファイル名の衝突回避を 中途半端に自動化するより、アプリ配布者に衝突しない名前を付ける ようにしてもらう方が良いと考えを改めたため。 ダイアログのアイコン位置とサイズを調整した。 ショートカットページの上書き時の注意書きは必然性が無いので除去した。 アンインストールのメニュー項目は、2番目のアイコン(アンインストール) を登録するようにした。 ■fix3 Aug.30,2000 resource.h, install.rc: infファイル名の切り替え文字列をリソースに置いた。 バージョン番号を暫定的に 1.15.patch3 とした。 ダイアログ上のメッセージを一部変更した。 install.cpp: infファイル名の切り替え文字列をリソースに置いたので、lang_flagを完全に除去した。 2段以上のフォルダへのインストールを可能とした。デフォルトのインストール先を、 Windowsのプログラムファイルフォルダ下とした。 HIDEINST V1.1 の機能を一部取り込み、[install]セクションにて、 2=myapp.ini,w!myapp.ini 3=myapp.dll,s!myapp.dll と記載した場合、s!をシステムフォルダ、w!をウィンドウズフォルダに置き換えて コピーする。システムフォルダにコピーしたファイルはアンインストールしない。 アンインストールにて、自分が登録したショートカットのみを削除するようにした。 [working folder]セクションの 2= 以降も扱えるようにした。 [install]セクションに accessories=1 を記入すると、 「スタート>プログラム>アクセサリ」の下にショートカットを作成するようにした。 ファイルの上書き確認は、日付が古い場合のみとし、等しい場合は黙って上書き するように動作を変更した。 ファイルの上書き確認メッセージのファイル名大文字化をやめた。 ソースのインデントスタイルを K&R 形式に変更した。 不要なグローバル変数を除去し、一部の変数を改名した。 パス名操作関数、レジストリ操作クラスを追加し、処理を共通化した。 [install]セクションに記載するTitle名が、既存のアンインストール情報の登録名と 重複が無いか検査し、上書きインストール以外で重複を検出したらエラーにした。 具体的には HKLM\...\CurrentVersion\Uninstall\ キーの DisplayName が Title名と一致したら上書きインストールとみなし、不一致なら他のアプリケーション と重複があると判断してエラーにする。 該当キーが存在しない場合は、同階層のキーの DisplayName を全て列挙しTitle名と 一致したら、やはり重複があると判断してエラーにする。 これにて、アンインストール情報上では Title名 と Folder名 は一意(ユニーク)で あることが保証される。 インストーラ実行ファイル(exe)と、インストーラ情報ファイル(inf)は、ファイル名 先頭にを加えた名前でインストール先にコピーする。 これは同一フォルダーに複数のアプリケーションをインストール可能にするため。 Folder名は一意であるため、インストール先に同名ファイルが存在する可能性は かなり低いはずである。 ※Title名はショートカット名およびアンインストール情報の登録名として使用する。 ※Folder名は初期インストールフォルダ初期値およびアンインストール情報の  レジストリキー名として使用する。 -------------------------------------------------------------------------- ■fix2 Aug.23,2000 resource.h, install.rc: メッセージをすべて文字列リソース化し、日本語ブロックと英語ブロックに入れた。 他の言語(独仏中韓...)も、リソースに言語ブロックを追加して翻訳するだけで 良くなった。 install.cpp: 文字列リソース化が完了したので、if (lang_flag==0) によるメッセージ選択は 除去した。 WindowsAPIのロカール日付関数を使い、実行OSのロカール(言語・地域習慣)に 適したファイル日付表記ができるようにした。(上書き確認メッセージで使用する) CDROMからの上書きインストールで、コピー先がReadOnlyになる不具合を修正した。 その他、コーディングレベルの細かい改善を行った。 -------------------------------------------------------------------------- ■fix1 Aug.22,2000 install.rc: 日英のLANGAGEブロックを設けて、日本語と英語のダイアログを振り分け、 リソース番号を同じにした。 install.cpp: ダイアログリソースの番号を日英で同じにした(選択をOSに任せた)ので、 if (lang_flag==0) によるダイアログ選択は除去した。 -------------------------------------------------------------------------- ■fix0 Visual C++ 6 でコンパイル可能にした install.rc に #include "afxres.h" を加え、 生成バッチ mkvc.bat を作成したのみである。 -------------------------------------------------------------------------- 久野 浩 mailto:hkuno@microhouse.co.jp [END]