Windows INFファイル(3) 1999.Jun.12 1. はじめに  今度はsetup用の.INFファイル。ただし古いINF形式です。 --- 補足 ---  最近、WSHというかVBScriptで色々やってんですが、こいつのヘルプ、  VBSDOC.INFでインストールされるんです。ところがインストール先の選択が  できたり、色々と今までできなかったことを平気でやってくれます。で、  VBSDOC.INFをよっく見ると:  AdvancedINF=2.5,"You need a new version of advpack.dll"  ってなことが書いてある。  いつものことながら、知らない間にバージョンが上がっていたようです。  これからはこっちの方も研究せねば。とは思ったのですが、どーせIE4以降だとか  そーゆー制限が付いているのは目に見えてます(偏見モード)。  まぁ私としてはただのテキストファイルの.INFであのInstall Shieldの代わりが  できるのならそれに越したことはないですから、ぼちぼち研究したいと思います。  が、古い.INFで培った技術を闇に葬るのは悲しいのでここでまとめる次第です。 --- 補足終わり ---  前にも書きましたが、まとめの意味でちょっとだけ箇条書き:  欠点:  ・ロングファイル名の扱いに制限があります  ・ロングファイル名のフォルダからのインストールはできません  ・アンインストール時、フォルダを消せません。ファイルやレジストリは消せます  ・対話的処理ができません  長所:  ・インストールするファイルのタイムスタンプや言語の類を適切に処理します。   「言語の異なるバージョンがあります」とか言ってくるし、   同じバージョンや同じタイムスタンプのファイルはコピーしません  ・使用中のファイルを置きかえようとすると、再起動を促すプロンプトを勝手に   出すし、再起動後は自動的にファイルを置き換えてくれます  ・NTと9xで別々の処理もできます。が、あたしゃNT持ってないんで(^^;; 2. サンプルsetup  今回は別ファイル。これは完全なものです。ただし、動作はしません。いやその。  公開しても意味のないもんなので。次の動作をします。  ・.INFのあるフォルダ内のファイルを指定のフォルダに転送    *.lzhとか*.zipを展開した後で.infを実行、というシチュエーションを想定  ・コピー元のフォルダは1つだけど、コピー先フォルダは別々    基本的にC:\Program Files\{プログラム名}の下、という原則を踏襲します  ・ショートカットを作成    これも、スタートメニュー、プログラム、{プログラム名}、という場所に    作ります  ・アンインストールもサポート    もちろん、コントロールパネル、アプリケーションの追加と削除です  さて。サンプルをエディタで開いて見ながら以下の説明をお読みくださいね。 3. 説明  ・[Version]のSignatureは固定。  ・[DefaultInstall]:インストール時にする動作。バリューの名前(CopyFilesとか)は   固定です。変更することはできません。   CopyFiles ; ファイルをコピーする   AddReg ; レジストリに追加   UpdateInis ; ショートカットの変更。何故にこういう名前か、というとsetup.iniを     書きかえるからですね   '='以降はセクション('['と']'に囲まれた奴です)名です  ・[DefaultUnInstall]:アンインストール時の動作   DelFilesとかDelRegなどは予め決められています。変更はできません。  ・[SourceDiskNames]   インストール時、「xxと書かれたFDを入れてくれ」とか言われる場合があるけど、   それっす。余り気にしなくて良いです。この場合  ・[SourceDiskFiles]   ?(って、おい。とりあえず、自分自身は[SourceDiskNames]の1番に含まれてます。   ということだけ宣言してます)  ・[DestinationDirs]:コピー先のフォルダ   DefaultDestDirは、その名の通り指定がない場合のコピー先。その他はCopyFilesで   指定されたセクションと同じ名前です。つまり、   CopyFilesで指定されたセクションにあるファイルをどこにコピーするかって指定。   ここで、30とかいうのはLDID。LDIDの一覧は別掲したからそっちを見てね。   で、%Prg.SFN%は、後ろの方の[Strings]セクションのPrg.SFNと置き換わる訳。   このあたり、ロングファイル名を使うと妙なことになるのだ。   ま、「%」で囲んだ文字列は[Strings]セクションのバリューの値と置き換わると   理解してください。  ・[App.Sc]:ショートカットの作成   最初にグループを作って、その中にアイコンを追加。   書式にprogmanってなのがあるから、Win3.1互換な方法でやっている気がする。   このセクションの2行目移行は:    setup.ini,グループ1に,,こういうアイコン名で,こういうコマンドラインを(引数付きで)登録し,    そのアイコンはこのファイルの,数字番目のものを使って表示,,,   なんですね。多分、「実行時はこのフォルダで」という引数もあるんでしょうが追求は   してません。  ・[App.Libs], [App.Files], [App.Ini]   単にコピーするファイルをコピー先別に分けただけ。CopyFilesを参照のこと  ・[App.Reg]   HKLM = HKEY_LOCAL_MACHINEです。同様にHKCU = HKEY_CURRENT_USERだったりします。まぁ、   このあたりはご想像の通りなので、詳細は省きます。   ちなみにここではコントロールパネルからのアンインストールができるだけの情報しか   レジストリに書いていません。UIDescが「アプリケーションの追加と削除」で表示される   文字列で、その下のがアンインストール時に実行されるコマンドラインです。   ここんところ、ちょっとひねると「Windowsファイル」の方のタブに入れて、あたかも   Windowsのオプションモジュール(アクセサリのゲームとか)みたいに表示する真似も   できますが、Win98から、こっちのタブをクリックすると異様に動作が遅いので、紹介は   しません。  ・[App.Sc.Del]:ショートカットの削除   ちなみに、グループの削除を指定しても、そのグループ内に削除対象外のアイコンがあった   場合、グループは消えません  ・[App.Reg.Del]   不用レジストリの消去  ・[Strings]   基本的に文字列の置き換え用のテーブルですが、あえて説明します。   Util ; スタートメニューで表示される文字列   UIDesc ; コントロールパネル、アプリケーションの追加と削除で表示される文字列   Tool ; インストール先フォルダ名。C:\Program Filesの下に作成される   RegName ; アンインストール用にレジストリに登録される名前   UnInst ; アンインストール用に登録しなければならないレジストリキー。OS依存。     固定。ここにRegNameでアンインストールする時に実行すべきコマンド名とかが     書かれます。つまり、うっかり正式なアンインストール手続きをしないで消して     しまったアプリケーション名が例の「アプリケーションの追加と削除」に     表示されて鬱陶しい場合は、レジストリのここをいじれば消えるわけです。     (DLLへのリンクカウンタがどーのこーのって話もありますが……) 4. 最後に  RegEditと格闘すれば分かりますが、*.Infを右クリックしてインストールって  やると、実際には:  rundll.exe setupx.dll,InstallHinfSection DefaultInstall 132 xxx.inf  ってのが実行されるんですね。まぁ、何かの参考まで。 5. おわりに  今のところ、このサイトのFree Softで複雑なインストールを必要とするものは  ありませんが、もしインストーラが必要となればきっと私は.INFでインストール  するように作るでしょう。  無料のもので間に合うのに金払って高いソフトを買うってのはおもしろくないし、  趣味でもありません。だから個人でVC++やInstall Shieldを買うつもりはさらさら  ないです。  …会社ではバウンズチェッカとか、SoftIceだのをダダこねて買ってもらったり  してますけど(^^;;  ま、趣味は趣味。「トンカチ持っている奴には全ての問題が釘に見える」な狭量な  ことはなしで、やって行きたいと思いますです。  #だったらfreeなunixは?という声があるかも。まぁその。ぼちぼちですぅ。   JFのドキュメントは全て落として展開済みだったりするし(^^; (EOF)