シリアル番号の検査 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)をコールするようにしました。

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

error: コピーできません !!