インストール・プロジェクト

19件の投稿

InstallAware

InstallAwareのドキュメントは驚くほど貧弱で、しかも英文しかありません。
しかしそれに反してソフトは評価できます。

InstallAwareでは[Windows Installer]の仕様に沿った3タイプのセットアッププログラムを作成します。
すなわち単一圧縮ファイル、CDあるいはDVDに焼き付ける形およびWEBからインストールする形です。

WEBインストールでは、
インストールが始まった時は必要最小限のプログラムだけダウンロードし、
インストールの途中で必要になったソフトを、
設定URLからダイナミックにダウンロード・インストールするようになっています。

また当該プログラムが動作するために必要なRuntimes(.NETやSQL Server等)がすでにインストールされているかどうかを確認し、
なければこれらをインストールします。

標準では用意されていないRuntimes(例えばAccessRunTime)の検査およびインストールも、
比較的容易にコーディングできます。

ただしRuntimesに関して一つの欠点があります。

WEBインストールではRuntimesをWEBに置くので問題ないのですが、
その他のインストールでは、
アプリケーションプログラムが必要とするすべてのプログラムをセットアッププログラムに入れておかなければいけません。
SQL Server等Runtimesは一般に大きなプログラムですし、
ターゲットコンピュータにはすでにインストールしてあって、
改めてインストールする必要がないかもしれません。

CDやDVDの場合は良いのですが、
単一ファイルにしてダウンロードする場合は、
ダウンロードそのものが大変ですし、その上無駄な作業になる可能性があります。

単一ファイル・セットアップをインターネットからダウンロードする形で使わないで、
WEBインストールかメディアインストールかにすればいいのでしょうが、
下に書きますようにWEBインストールでは手間暇かかるので、
すくなくともデバッグの途中では単一ファイルをWEB上に置きたくなります。

WEBインストールに問題があります。

上で書きましたが、WEBインストールでは最小限のセットアッププログラムと、
Runtimes等のいくつかの7zipファイルを作りますので、
これらの7zipファイルを指定のURLにアップロードしなければいけません。

これらのファイル名はInstallAwareの中では、大文字小文字が混ざっています(ケース・センシティブ)。
例えば、[Microsoft .NET Framework Client 4.7zip]のようです。
ところが、InstallAwareはWindowsの開発環境にセットアッププログラムの一部として
[microsoft .net framework client 4.7zip]のようにすべて小文字のファイルを出力します。

InstallAwareのユーザは、
小文字のファイル名を[Microsoft .NET Framework Client 4.7zip]のように変更して、
所定のURLにアップする必要があります。

セットアッププログラムのデバッグでビルドする度に、
何度も何度もファイル名の変更とアップロードが必要になります。

この表現は正確ではありません。
ファイルはいくつかのRuntimesと
ユーザが設定する[Program Files]や[Data Files]等のFeaturesに対応して作成されますが、
Runtimesは毎度同じですから何度も作成しなくてよいのです。
その代りデバッグ中のFeaturesはその都度更新しアップすることにないrます。

Featuresはセットアッププログラム特融の概念です。専門的で申し訳ありません。

InstallAwareのForumでもこのことにクレームがきていました(2008年)。
「アップするサーバーがLinuxの場合ファイル名はケース・センシティブだから、
これに対応するように改良してほしい」というものです。

とことがInstallAwareの開発者は、
「Windowsではファイル名は大文字でも小文字でも同じ扱いだからこれでいいのだ」
「だいたいInstallAwareはWindows用のツールなのだ」と見当違いの主張をします。

明らかにユーザの主張が正しいのですが、
大体InstallAwareがそのことを認識していないことに驚く次第です。

最近のInstallAwareの別のスレッドの回答では「改良検討中」になっていました。

私は仕方ないのでPerlで、
ファイル名を変更して指定のURLにアップするプログラムを書き、
InstallAwareでビルドする度にこのプログラムを実行することしました。
Perlはこういう仕事に適しています。

それにしてもこれはInstallAwareの中で処理すべきです。

インストールでよく使われている、
ユーザ名とシリアル番号の入力を促すセットアッププログラムの例が標準で用意されています。

インストールしようとしているアプリケーションプログラムの依存Dllの検出は、
InstallAwareの中で当該アプリケーションを動作されることで収集できますが、
使ったすべてのDllをユーザのプログラムフォルダにコピーする仕組みになっていますので
「これはいらないのではないの」というもの(例えばマウスのドライバー)も入ってきます。

マイクロソフトのセットアッププログラムでは、
必要最小限の依存プログラムを収集します。
InstallAwareでそれだけを組み込んでセットアッププログラムを作成しても正常動作しますので、
「それでもいいのでは?」と思っています。

InstallAwareそのものはすべて英文ですが、
作成したセットアッププログラムでのインストール時の表示は、
比較的容易にローカライズ(日本語化)できます。
またインストール用画面(ダイアログ)も自分で作成できるようですが、使ったことがありません。

InstallAware2012にはTrialWareというツールがあります。

デモ用でインストール後に期限切れにする仕組みを作成します。
「ある回数使ったら」とか「何日たったら」とか色々な設定ができます。
eCommerceと組み合わせて、try-and-buyの仕組みにできそうです。

私はとりあえずtry-and-dieの仕組みだけ使って、
「期限がきたら終わり」という形にしたいと思います。

私はこれまで、デモ版ではアプリケーションプログラム本体で機能を制限していましたが、
TrialWareではプログラム自体は変えないで、
セットアッププログラムで期限切れを設定するだけなので「とても使いやすいかな」と思っています。

ただし悪いことに「あと何日で期限切れです」
という案内は日本語がでません。

TrialWareにバグがあります。

アプリケーション・プログラムのExeファイルを、
スタンドアロンで期限チェックプログラムのラップをして、
このラップされたEXEを、
InstallAware2012 IDEでセットアッププログラムに組み込めば問題ないのですが、
IDEの中でいっきにこの処理をしようとするとエラーになります。

メーカーに調査依頼しています。
回答待ちです。

秀逸なのはPatchプログラムです。

アプリケーションプログラムを改変したとき、
ユーザが使用しているプログラムにPatchをあてなければいけません。
InstallAware2012では古いセットアッププログラムから容易にPatchプログラムを作成できます。
変更のあった部分を自動で認識し、
アプリケーションの環境でその部分(Featureを構成するComponent単位で)を入れ替えるようです。

PatchとかUpdateとかは、Windows Installerの仕様のようですが、
プログラムの更新が容易にできる仕組みはすばらいいです。

セットアッププログラム >> InstallAware

このブログで何度か書きましたが、
ソフトウェアを開発したら、
そのソフトをターゲットコンピュータにインストールするプログラムを作成しなければいけません。

「ターゲットコンピュータのどのフォルダーにどのプログラムやデータをインストールしていくか」
ということですが、
厄介なのは自分が作成したプログラムだけでなく、
自分のプログラムを動作させるために必要な、
マイクロソフトやサードパーティーのソフトもインストールしなければいけないことです。

パッケージソフトの場合はターゲットコンピュータも様々ですし、
それぞれのターゲットコンピュータには様々なソフトがインストールされていますので、
考えもせず各ソフトを勝手にインストールしていたのでは、
各ソフトが干渉してコンピュータがパニック状態になります。

ですから各ソフトのインストールは大変微妙な作業で、
そのためにインストール(セットアップ)作業をサポートするツールが必要です。

最も有名なソフトは[InstallShield]です。

セットアッププログラム作成ツールはどれも高価で、
[InstallShield]では安価な版でも10万円程度です。
内容は知りませんが上位のものは100万円もします。

今時高価なセットアップ作成ツールを買える(採算の合う)ソフトはどれだけあるのでしょうか。

これほど高価なのは、セットアップ作成ツールの市場が大きくないからかもしれません。
パッケージソフトを作っている会社にとっては必需品ですが、
市場規模としては大きくはないのでしょう。

私は以前は[InstallShield]を使っていたのですが、
数年前に[InstallAware]というソフトにしました。
理由は安く入手できたからです。

InstallAwareは[InstallShield]の開発会社から独立した社員が作っているようです。

最近はもっぱらこのソフトを使っています。
自分に必要なところをつまみ食いしているだけで、
全てを知っている訳ではありません。
なんとか手さぐりでインストールプログラムを作成しています。

このソフトの評価を最初に書きますと、
内容は良いのにドキュメントやサポートがとても悪いということです。
実は会社の所在地もよくわからないのですが多分米国で、ドキュメントはすべて英文です。

ドキュメントは5世代も前のもので、
しかも一冊になっていないので、
同社のホームページを探し回ってやっと何とかなるというような状態です。

フォーラムがありあますが、そこでの回答もそっけなく、
そこからの情報も大変悪いです。
ともかく次のところまで行きつきました。

インストールプログラムはCDでの配布あるいはWEBからのダウンロードとし、
インストールにはユーザ名とシリアル番号の入力を必要とする。

CD(あるいはDVD)でのインストールは昔からのインストール方法で、
最近では、インターネットからダウンロードしてインストールする方法も多くなってきました。

WEBインストールはソフト提供側からすれば、
解説書の印刷やメディアの作成等経費が軽減できますし、
将来の変更への対応やユーザの管理も容易で、
不正インストールの防止もできますので、
今後ますます増えていくことでしょう(ユーザは不満かも知れませんが)。

これからはクラウドが発展するのでしょうし、
クラウドではインストールプログラムの役割も変わってくるのでしょう。

シリアル番号の検査 in MSI セッアップ、 WIX

パッケージソフトを作って、インストールの途中でシリアル番号のチェックをしたい。[InstallShield]等の高価なソフトを買うほどのことではない。このようなケースは結構あるのではないでしょうか。

[Visual Studio]でSetupProjectを作成できますが、添付されているシリアル番号の検査は、非常に単純で内実を知っているユーザからすれば全くの無防備です。

恐らく政治的な(あるいは商売上の)方針だと思いますが、マイクロソフトはこのあたりの実装について公開していません。公開されているカスタムアクションは、製品のインストール終了後直ちにインストールしたプログラムを開くとか、データベースを作成するとかの方法の情報だけで、インストールの途中で独自のシリアル番号のチェックするルーティンを走らす情報はどこを探しても出てきません。

私自身は[InstallAware]というソフトを購入したのである意味緊急という訳ではないのですが、めったに使わないのにOSや[.Net Framework]の更新があるたびに、買い替えなければいけないのは抵抗があります。

手持ちのツールでなんとかしたいと長く考えていました。

なんとかなるのではないかと思いますのでご報告します。
道具立ては[Visual Studio 2010]と[Wix](WixEdit:Wix用無料IDE)です。

[Visual Studio 2010]には、マネージコード用のカスタムアクションDll作成ツールが付いていて、C++でもVBでもC#でもカスタムアクションが作成できます。手馴れた言語が使えるのはありがたいことです。

次はWixの情報です。これがなかなかありません。
多分唯一といっていい解説書は、[Wix : A Developer’s Guide to Windows Installer XML](PACKT)です。
ドンぴしゃりの解説はありませんが、Wix一般を勉強するにはいい教科書だと思います。紙が不必要に厚いのが気に入りませんが、英文は平易ですので読み進むのに抵抗はありません。

一番ほしいシリアル番号ルーティンの組み込みの方法は、インターネットで入手可能な[Wixチュートリアル](日本語訳)で十分です。

これだけあれば、[Visual Studio]のセットアッププロジェクトで可能な限りキチンとしたセッアッププロジェクトを作成し、インストールパッケージ(msi)を出力。出来上がったmsiを[WixEdit]で逆アセンブルし[wxs](XMLソースファイル)に変換して、これにカスタムアクションを組み込めばよい。

と思っていたのですが、そうは問屋が卸さないようです。
[Visual Studio]の[msi]を逆アセンブルした[wxs]は、教科書に書いてあることといささか異なります。出来上がった[wxs]はすんなり使えません。

これを色々調べながら使うくらいなら、はじめから[WixEdit]でwxsを作った方がいいようです。[Visual Studio]はDllの依存関係と所在を教えてくれますので、[Visual Studio]ではその辺りの情報だけ使うとよいと思います。

完全ではないのですが、模擬的にこれでよさそうだという[wxs](msi)を作りました。WixEditでターゲットマシンのディレクトリを作り、[Visual Studio Setup Project]からDllの情報を参考にしながら、ディレクトリの中にComponentを作成。[Wixチュートリアル]に従って[UI]を作成。この中で[Visual Studio]で作っておいたカスタムアクション(.CA.dll)をコールするようにしました。

まだ色々詰めなければいけませんが、なんとか物にできそうです。

セットアッププログラム

5月だったか[ソフトウェアの開発 Etc]で触れましたが、
パッケージソフトであれ受託ソフトであれ、開発が完了したら、
最終的にはそれを顧客のコンピュータにインストールしなければいけません。

そのためには開発とは別にインストールプログラムを作成しなければいけません。
Visual Studio 6では(およそ10年前)、
ディストリビューションプロジェクトというのがあって、これでインストールメディアを作っていましたが、
この仕組みは先にも書きましたように、
必要とする関連ソフトを闇雲にターゲットコンピュータにインストールするので、[Dllの地獄]という状態を作り出していました。

それを解消すべく、マイクロソフトはMicrosoft Installer(MSI)を開発し、あらかじめターゲットコンピュータにこのMSIをインストールしておいて、個別のソフトのインストールはMSIがすべて一元管理するようにしました。今ではMicrosoft InstallerがWindowsでのインストール標準になっています。

Windowsの開発環境であるVisual Studioでは、標準でmsi準拠のセットアッププロジェクトを作成する仕組みが提供されています。ただインストールする条件もいろいろあるため、いわばアドホック(場当たり的)な部分があります。
近年、インストール条件をXMLで記述する技術がオープンソースとしてMicrosoftから発表されました(WIXといいます)。
これによってインストール条件の設定についてはだいぶ透過性がよくなったと思います。がこれも発展途上というところだと思います。

インストールプロジェクト作成ソフトとして日本で最も有名なのは、[Install Sheild]ですが、このソフトは何故か年々高額になって、現在では一本数十万円から100万円を超える価格になっています。

高額なソフトや大量に販売が見込めるソフトのインストールプログラムの作成であれば、[Install Sheild]はベストチョイスでしょうが、そうでなければなかなか手が出ません。

この様な状況の中で、できるだけお金をかけないで、いまセットアッププログラムを作成するのにどのようにすればいいか。私たちのケースをご紹介いたします。

インストール時にユーザにシリアル番号等特に厳密はチェックを必要としない場合は、Visual Studioのセットアッププロジェクトを使うのが便利です。Visual Studio 6で開発したソフト(.NETを使っていない)であれば、Visual Studio 2003のセットアッププロジェクトが使えます。残念なことは、Visual Studioのシリアル番号のチェックは甘いので、厳密なチェックはできません。

あるプロ不ラムをインストールし使うには、別のソフトが必要な場合があります。たとえば.NET Frameworkやクリスタルレポートが必要な場合は、それらのソフトがターゲットコンピュータにすでにインストールされているかどうか調べ、なければこれらをインストールしなければいけません(ランタイムのプレインストール)。

Visual Studioは、このあたりの処理は見事にやってくれます。
Visual Studioの短所は、こまめな処理ができないということです。たとえば、先の例で独自のシリアル番号チェックプログラムを組み込むことができません(少なくとも私たちにはわからなかった)。

 WIXはこのあたりの処理ができます。私はWIXがすきです。WixEditというWIX用IDEツールがあります(Sharp Developも要検討)。なかなかいいのですが、WIXを使いこなすには少し勉強が必要です。
それと、これはWIXの仕様だと思うのですが、ランタイムのプレインストールができないようです。
この部分は、Visual Studioと組み合わせて使うことができるのではないかと考えています。

WIXを時間をかけて勉強する時間がなかったので、私たちはInstall Aware(以下IAといいます)というソフトを使いました。理由は比較的安く、やりたい機能がそろっていたからです。ただし、ドキュメントが悪いし、サポート対応が悪い。それに日本語版(IDEでの日本語表示等)はないのです。
IAにはScriptと称するものがありますが、この言語仕様がない。チュウトリアルもない。手探りで習得するしかない。
Scriptは言語というよりいわばコマンドセットで、ともかくこのコマンドの使い方を習得するのがIA習得の手っ取り早い方法です。
機能や使い方そのものは悪くないのに、このドキュメントの悪さは何なのかと不思議に思います。