インストーラ作成ソフト

‘さまれぼ!’インストーラ作成のために試用したソフト紹介

2009年5月28日 (木)

バージョンアップツールを作る(8)~バージョンチェック追加

LHA自己解凍書庫を使ったバージョンアップツールだが、実際に使用する上での課題が見つかった。‘さまれぼ!’では、多くのファイルが更新されるメジャーバージョンアップなどで簡単インストーラを利用し、それ以外の細々としたマイナーバージョンアップで自作ツールを使うことを想定している。マイナーバージョンアップでは、直前のメジャーバージョンアップに対して変更のあったファイルを提供することになるが(Windowsなどのサービスパック方式)、メジャーバージョンアップを重ねていった場合、古いメジャーバージョンに対して最新のマイナーバージョンアップを適用されてしまうと、システムに不整合が生じる。これを避けるには、マイナーバージョンアップで適用先のバージョンチェックを行う必要がある
それでバージョンチェックを行う方法を考えたのだが、二つのポイントがある。一つはバージョン確認方法、もう一つは適用対象バージョン指定方法。

まず適用先のバージョンをどうやって確認するかということだが、システムバージョンを格納したファイルがあるので、そこから取得するのが一番確実だ。しかし、暗号化しているのでそれなりの手続きを踏まないと読むことができないし、汎用性もなくなる。そこで、簡単インストーラの設定ファイル(install.DAT)を利用することを考えた。ここにもシステムバージョンが記録されていて、INI形式のファイルなので簡単に読めるのだが、簡単インストーラ限定になってしまう。それで、確実性という点では少し劣るが、ファイルのタイムスタンプでチェックするようにした。システムバージョンを格納したファイルのタイムスタンプが、指定した日付以降ならバージョンアップ対象とみなすわけだ。これで適用先のバージョンが古いケースを除外できるし、逆に新しい場合は適用先の方が更新対象ファイルのタイムスタンプが新しいために上書きされることはない。

次に適用対象のバージョンをどのように指定するかということだが、普通に考えればファイルで指定する方法だろう。ただ、このためにわざわざファイルを用意するのは、ファイルの読込処理を追加したり、運用時に一つ余計にファイル指定が必要になったりと面倒。それで、プログラムの引数として与えられないかとLHA自己解凍書庫のドキュメントに目を通すと、与えられることがわかった。
というわけで、プログラムのオプションとして引数で渡すことにした。今後の機能追加に備えて、オプション判別に「-D」を指定することにして、ファイルパスと日付を「,」区切りで渡すことにした。しかし、思ったように動作しない。「,」は特別の意味を持つようだ(ドキュメントに「"」でエスケープが必要みたいなことが書いてある)。

そのようなわけで、最終的に次のような指定になった。

>$Command=%WORK%\SMSVUP\PAD20090401\VerupTrigger.exe -DDATALIB\Version.ini?2009/3/20

この例の場合は、「DATALIB\Version.ini」のタイムスタンプが「2009/3/20」以降ならばバージョンアップを行うことになる。
以上でバージョンアップツールの修正は終了。

2009年2月11日 (水)

簡単インストーラに関する記事を整理

これまで、サロン管理システム‘さまれぼ!’のインストーラを作成するために簡単インストーラを利用してきたが、この過程でさまざまな試行錯誤を行ってきた。その過程を全て記事にまとめてきたが、インストーラ枠で割り当てたカテゴリでは記事が全て表示されてしまい一覧性に乏しい。そこで、簡単インストーラお役立ち情報として目次風にまとめた。

2009年2月10日 (火)

簡単インストーラ:追加したショートカットを削除する方法~完全版

インストール処理後に追加したスタートメニューのショートカットを削除する方法を記事にしたが、サブメニューが残るという欠点があった。今回は、その欠点を解消したい。

まず考えたのは、ショートカットファイルを拡張子で指定すると「指定ファイル/フォルダの削除」の時点で全てのショートカットが削除されてしまうため、「ショートカットの削除」で削除すべきショートカットがなくなる。そのため、サブメニューフォルダが削除されないという可能性を考えた(かなり低いとは思ったが)。
それで、削除するショートカットファイルを特定することにした。

Einstall24

この設定で試しみたが、サブメニューは削除されなかった。
「%ProgramDir%」内のサブメニューフォルダの削除は「ショートカットの削除」で行われるのではないのだろうか?それとも、アンインストーラ起動時にショートカットのチェックを行っていて、それに基づいてサブメニューフォルダを削除するかどうかを決定しているのだろうか?
いずれにしろ、簡単インストーラの標準処理に任せては削除できそうにない。

そこで、発想を変えて「指定ファイル/フォルダの削除」でサブメニューフォルダを削除することにした。

Einstall25

同時に、汎用性を持たせるためショートカットファイルの削除は拡張子で行うように設定を戻した。

Einstall22

「アンインストールの設定」の「ファイル/フォルダ」タブでは、ショートカットファイルを指定した後でサブメニューフォルダを指定する
最後に「処理」メニューの「処理順序の指定」を標準に戻してインストールファイルを作成し、インストールとアンインストールを行った。その結果、スタートメニューからサブメニューごと削除され、完全にアンインストールできた。

2009年2月 9日 (月)

簡単インストーラ:追加したショートカットを削除する方法

インストール処理を行った後にスタートメニューにショートカットを追加して、アンインストール時にそれも一緒に削除したいと考えていた。‘さまれぼ!’の場合、ライセンスファイルをインストールする際に追加したいショートカットがあるためだ。バージョンアップでオプションソフトを差分で提供してショートカットを追加するが、アンインストーラは更新しないケースも考えられる。
しかし、簡単インストーラの「アンインストールの設定」にはショートカットを指定するタブがない。それで、何とか削除する方法がないか試行錯誤してみた。

スタートメニューのショートカットも所詮ファイルにしかすぎない。「アンインストールの設定」の「ファイル/フォルダ」タブで指定できないだろうかと考えた。簡単インストーラでは、スタートメニューの実体フォルダを「%ProgramDir%」フォルダ定数で取得できる。
ところが、「削除するファイル/フォルダ項目」の「フォルダ定数 ▼」には「%ProgramDir%」が含まれない。「%ProgramDir%」を一旦レジストリに保存して、「%RegistryDir%」から参照するしかないかと思ったが、「▼」から選択せずに直接「%ProgramDir%」を入力してみた。すると、指定できてしまった。

Einstall22

早速試してみると、ショートカットは削除されていた。ところが、スタートメニューの「SMSTEST」サブメニューが残っている。「%ProgramDir%」内の「SMSTEST」フォルダが削除されないためだ。
そこで、処理順序を変える必要があるのだろうと考えた。「%ProgramDir%」内の「SMSTEST」フォルダの削除が「ショートカットの削除」で行われるとすれば、その前に「指定ファイル/フォルダの削除」を行わなければならないだろう。

Einstall23

これで試してみたが、残念ながらり「SMSTEST」フォルダは削除されなかった。
まあ、とりあえずショートカットは削除されるようになったので、良しとしよう。

2009年2月 8日 (日)

簡単インストーラ:アンインストーラをスタートメニューに登録する方法

‘さまれぼ!’のインストーラを作成していて、アンインストールをいちいちコントロールパネルから行うのは面倒なので、スタートメニューにアンインストーラを登録したいと考えていた。しかし、指定方法がわからないため後回しにしていたのだが、簡単インストーラ自身にはスタートメニューにアンインストールがある。それで調べてみた。

まず、スタートメニューのショートカットは「C:\WINDOWS\eiunin21.exe "C:\Program Files\einstall2\install.DAT"」のようになっていた。とりあえず、「C:\WINDOWS」とC:\Program Files\einstall2」をフォルダ定数に置き換えれば作成できそうだが、「eiunin21.exe」などを直接記述する必要がある。
ふと思い付いて簡単インストーラの「install.DAT」を見てみると、定数(システム定数)が用意されていることがわかった。
それを使ってショートカットの設定を行った結果、次のようになった。

Einstall20

また、「その他」タブにもチェックが入っていた。

Einstall21

この設定で試してみた結果は成功だった。簡単インストーラの「install.DAT」にはまだまだ参考になる設定がありそうだ。

2009年2月 6日 (金)

簡単インストーラ:アンインストーラで指定フォルダを削除する方法

今回は、簡単インストーラが提供するアンインストーラで、フォルダを削除するための指定について注意すべき点を整理する。
既報の通り、「アンインストールの設定」で個別に指定したフォルダが削除されるのは、中にファイルやサブフォルダが存在しない場合だけなので、ファイルやサブフォルダも「削除するファイル/フォルダ項目」として指定しなければならない。
その時注意しなければならないのは、まずフォルダ内のファイルを指定し、その後でフォルダを指定するということ。この順番が大切で、フォルダを指定した後にファイルを指定すると、フォルダが削除されずに残ってしまうので注意が必要だ。
尚、サロン管理システム‘さまれぼ!’では、次のように指定している。
Einstall18

この点から、単純に「アンインストールの設定」で指定した順に処理されることが予想されたので、下位のフォルダから順番に指定しなければならないだろうと考えた。実際に次の指定で検証してみた。
Einstall19

すると、予想に反してフォルダは削除されていた。どうやら、プログラム内部で下位のフォルダから処理するように手を加えているようだ。だったらついでに、フォルダの前にファイルを削除すれば良いと思うのだが、できない理由でもあるのだろうか?
もしできないのであれば、「アンインストールの設定」で指定した順番を変えられると便利だと思う。今は、一旦削除してから追加し直すか、それが嫌ならプロジェクトファイルの[DeleteFileItems]を直接編集しなければならない。

2009年2月 5日 (木)

簡単インストーラ:アンインストーラで指定ファイルを削除する方法

前回記事のように、簡単インストーラが提供するアンインストーラでフォルダを削除するには、まずフォルダを空にしなければならない。そして、インストール後に作成されたファイルを削除するには、インストーラ作成時に予めファイル名や拡張子で指定しておく必要がある。今回は、その際の指定方法をまとめておく。

特定のファイルを削除したい場合は「アンインストールの設定」の「ファイル/フォルダ」タブで指定する。「削除するファイル/フォルダ項目」画面の「種類」で「ファイル」を指定する場合は、ファイル名を指定するしかないので迷うことはない。ところが、「拡張子」を指定する場合は注意が必要で、指定方法が直感的ではない。にもかかわらず説明書には詳しい記述がないので、次のように試行錯誤する羽目になった(拡張子「log」を例にあげる)。

  1. 「拡張子」ということなので素直に「log」を指定するが、アンインストール時に削除されなかった
  2. ピリオドを付けて「.log」を指定するが、削除されなかった
  3. ワイルドカードを付けて「*.log」を指定すると、ようやく削除された

Einstall16

「拡張子(E)」という見出しの横にでも入力例が書いてあれば迷わずに済んだので、不親切と言える。
ここで、ワイルドカードが使えるなら「E*.lo?」のようなパターン指定が可能かもしれないと思い、試してみた。
Einstall17

すると、「ERROR.LOG」「ERROR1.LOG」「ERROR2.LOM」は削除されたが、「FRROR.LOG」「WORK.LOG」は削除されなかった。予想通り、パターンによる指定が可能らしい。
単に拡張子を指定するよりも柔軟性に富んだ指定が行えるが、「拡張子」ではなく「ファイルパターン」とでもした方がわかりやすいのではないか?せめて画面上か説明書に指定例が書いてあれば、迷うことなく指定できるようになるのに。残念。
また、この拡張子指定はフォルダごとに指定しなければならず、サブフォルダまで効果は及ばない。フォルダが幾つもある場合に面倒だし、フォルダ名が不定の場合には削除できない。

尚、簡単インストーラをVer.2.39aにバージョンアップしたのを機に「プロジェクト仕様書」の[DeleteFileItems]を読んでみると、ワイルドカードが使えることが書いてあった。もっと早く読んでみれば良かった。ただ、これは標準ではインストールされないので、バージョンアップ前はインストールしていなかったかもしれない。

2009年2月 4日 (水)

簡単インストーラ:アンインストーラで導入先フォルダを削除する方法

簡単インストーラが提供するアンインストーラで‘さまれぼ!’をアンインストールすると、インストール先のフォルダが削除されず、中にはファイルが残っていた。残っていたのはインストール後に作成されたファイルだった。インストール先の「install.dat」にインストールされたファイルが記録されていて、アンインストーラはそのファイルを削除するようだ。
それで、簡単インストーラの「アンインストールの設定」でインストール先のフォルダを削除するように指定した。
Einstall14

この設定で作成したインストーラで、一旦インストールした後にアンインストールすると、やはりファイルは消えずに残っている
「アンインストールの設定」で個別に指定したフォルダが削除されるのは、中にファイルやサブフォルダが存在しない場合だけらしい。誤ってユーザーのデータを削除しないようにという配慮のようだが、結構指定が面倒になる。ファイルやサブフォルダがあっても削除できるようなオプションが欲しい

インストール先のフォルダを削除したい場合、次のように設定すればいちいち削除フォルダを指定せずに済むようだ。伝聞なのは、方針変更によりインストール先のフォルダ削除をやめ、実際にテストしてはいないため。ユーザーが作成したデータベースファイルは消さずに残した方が良いだろうと考えたのだ。

  1. 「アンインストールの設定」でインストール後に作成されたファイルを削除対象としてファイル名や拡張子で指定する
  2. 「処理」メニューの「処理順序の指定」を選択する
  3. 「アンインストール」タブの「アンインストール時の処理順番を指定する」をチェックする
  4. 「処理リスト」の「指定ファイル/フォルダの削除」を選択する
  5. 「上へ」ボタンで「ファイル/フォルダの削除」の上に移す

Einstall15

このように指定すると、まずインストール後に作成されたファイルが指定ファイルとして削除され、その後でインストーラが導入したファイルやフォルダが削除されるが、その際、空になったフォルダは自動的に削除される。
一方、処理順序が標準設定のままだと、仮に指定ファイルが削除されてもフォルダは削除されないので、削除したいフォルダもファイル同様に「アンインストールの設定」で指定する必要がある。
尚、インストーラが導入したファイルやフォルダの削除は最下層から順番に行われ、フォルダ内が空になればフォルダを削除して、さらに上位のフォルダを対象に同様の削除処理を繰り返すようだ。そのため、インストール後に作成されたフォルダは「アンインストールの設定」で指定する必要があるかもしれない。

ちなみに、「処理順序の指定」で「指定レジストリの削除」にチェックがない状態でも「アンインストールの設定」で指定したレジストリは削除される(これは実際にテストで確認した)。「チェックを外すと該当処理は無効になります」とあるので削除されないのかと考えていたが、別の意味なのか?あるいは現時点でのバグかもしれないので、チェックしておいた方が良いかもしれない。

2009年1月31日 (土)

簡単インストーラでプロジェクトごとに文言を変える

‘さまれぼ!’本体のインストーラとライセンスファイルのインストーラとで画面上のメッセージを変えるには、プロジェクトごとに言語を変えれば良いと思いついた。
尚、「EI_MODERN.LNG」に直接手を加える必要があるが、修正ミスにより簡単インストーラが正常に動作しなくなる可能性があるので、注意してもらいたい。修正前のファイルをリネームして保存しておくのが良いだろう。

具体的な手順だが、まず言語を追加する必要がある。これは簡単インストーラが起動されていない状態で行う。

  1. 「EI_MODERN.LNG」をオープンする
    簡単インストーラ導入先フォルダ内の「Module\EI_MODERN.LNG」をメモ帳などのテキストエディタでオープンする。
  2. [ResourceString_1041]セクションをコピーする
    このファイルはWindowsのINIファイル形式なのだが、[ResourceString_1041]セクションを丸々コピーして、コピーしたセクションの名前を[ResourceString_1042]など他のセクションと重複しないものに変更する。尚、一つのセクションは160行以上ある。
  3. セクション内の項目値を変更する
    セクション先頭の「LanguageName」行に分かりやすい名前を付ける。次に「LanguageCode」行にはセクション名に使った「1042」などの数字部分を設定する。
  4. 「Module\EI_MODERN.LNG」を保存してクローズする

これで言語が追加され、次のような感じになる。
Einstall09

次は、簡単インストーラでの作業になる。

  1. プロジェクトメニューから「プロパティ」をオープンする
  2. 「モジュール/言語」タブの言語を選択する
    Einstall10
  3. 「編集」ボタンを押して言語データを編集する
    Einstall11
  4. 「OK」ボタンを繰り返し押して、プロパティ画面を閉じる

言語データの編集は、直接「EI_MODERN.LNG」を編集しても行えるが、簡単インストーラ上で作業したほうが安全だろう。

同様の手順で、ライセンスファイル用の言語を用意してプロジェクトに設定すると、インストーラはそれぞれ次のような画面になる。

Einstall12

Einstall13

2009年1月30日 (金)

簡単インストーラを使って差分ファイル提供

‘さまれぼ!’のライセンス購入者(ユーザ)には、購入後に送るライセンスファイルをインストールしてもらう必要がある。2つのファイルをコピーするだけだが、できるだけユーザの手を煩わせたくはない。もちろん簡単インストーラを使えば良いのだが、高々20KB程度のファイルをコピーするには大げさな感じがする。
それで、アーカイバを探すことにした。
条件は二つだけ。

  1. 複数ファイルを1ファイルで提供する
  2. インストール先をレジストリから取得する

二つ目の条件を満たすものがなかなか見つからなかったが、「udm差分ファイル作成ツール」を見つけた。なかなか高機能なのだが、営利目的で使うので有料。製品に対価を支払うのは当然だが、試して、支払って、プロテクト解除して、と考えると面倒で迷っていた。しかし、状況が変わった。
オプションソフトの顧客抽出をユーザーに試用してもらえるように、ライセンスファイル導入時には説明書をスタートメニューに登録するなどの処理を行うことにした。
こうなると、使い慣れた簡単インストーラでも役不足ではない。
インストール開始時と完了後に画面表示するようにして、試してみた。
機能的には問題なかったが、インストール画面上のメッセージがふさわしくない。ライセンスファイル用の「EI_MODERN.LNG」を用意して、インストーラ作成時に入れ替える方法をまず思いついた。しかし、いちいち入れ替えるのは面倒で、操作ミスも考えられる。
どうしようかと考えていると、ふと裏技的な方法を思いついた。それについては次回に。

尚、差分提供に簡単インストーラを使用する場合は、アンインストーラの設定に注意が必要だ。アンインストール情報を差分用で置き換えてしまわないようにしなければならない。「アンインストールの設定」の「アンインストール機能を有効にする」のチェックを外してアンインストーラを使わないようにするか、差分用のアンインストーラを別に作成するかになる。アンインストール情報(INSTALL.DAT)に差分で提供したファイルやショートカットを追加してくれるといいんだけどね。

2012年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

カテゴリー

無料ブログはココログ

最近のトラックバック