Lesson 3 イベントとアクション
5. マネージする方法
よくある質問の一つは、カスタム・アクションはマネージ・コード、つまり、C#、VB.NET またはそれに類するもので書くことが出来るか、というものです。 何と言っても、それらの実行時環境は、はるかに豊かな機能セットを提供してくれますからね。 それに、これらの言語で仕事をしているプログラマには、他のプログラミング言語をあまり知らない人もいるようです。
以前、WiX 2 の時代には、マネージ・コードでカスタム・アクションを書くためには裏技(hack)が必要で、 それは良くない危険な行為だと考えられていました。 しかし、WiX 3 になって、Deployment Tools Foundation (DTF) という .NET クラス・ライブラリと関連するリソースのセットが導入されたことによって、事情が変りました。 依存性による制約は明白です (インストール対象マシンに .NET が入っていることを確認しなければなりません。 おそらくは、ブートストラップ・インストーラを初めに使う必要があるでしょう。 また、ユーザーがアプリケーションをアンインストールする前に .NET Framework を削除すると、 アンインストールの際にも問題が生じる可能性があります) が、その制約を受け入れることが出来るのであれば、前のサンプルのカスタム・アクションを C# に移植したものを以下に示します。
SampleAskKeyNET のソース・コードには、ほんの一箇所だけ、修正が必要なところがあります。 DLL の名前は違うものになります。 と言うのは、Windows Installer とマネージされた世界の間隙を埋めるために、純粋なマネージ DLL を特殊なパッケージに包む必要があるためです。
訳註:SampleAskKeyNET の日本語版は Sample-3-5-AskKeyNet.zip です。
加えて、CustomAction.config という小さなファイルも用意して下さい。 このファイルは、マネージ・カスタム・アクションが依存するランタイムについて記述するものです。
.NET 言語で仕事をするときの相対的な容易さには代償があります。
それは、ビルドのプロセスが複雑になるということです。
IDE を使えばいくらか簡単になるでしょう。
WiX ソース・パッケージの DTF 部門の下にサンプル・プロジェクト・ファイルがあります。
ここでは、コマンド・ラインによる方法を示すことしか出来ません。
Microsoft.Deployment.WindowsInstaller.dll
, MakeSfxCA.exe
および sfxca.dll
を探して下さい。
インストールした WiX ツールセットの中にある筈です。
下記のコマンドで、path として記述している箇所は、省略しない絶対パスを指定しなければいけません。
そうしないと、MakeSfxCA はエラー・メッセージを出し、作成される DLL は役に立たない物になります。
ツールセットの中には DTF 自体のドキュメントがあります。 従って、このチュートリアルでは、DTF についてこれ以上言及しません。そちらのドキュメントとサンプル・コードを使って下さい。