これ以外は、私のインストーラークラスは特別なものではありません。Windowsサービスをインストールします。しかし、インストーラークラスがapp.configを更新できるように、ユーザーに情報の入力を求め、その情報をインストーラークラスに渡す必要があります。
デフォルトのユーザーインターフェイスに3つのページを追加しました。
- テキストボックス(A)
- テキストボックス(B)
- テキストボックス(C)
変数:
- Aでは、EDITA1を使用していますが、残りは表示されません
- Bでは、EDITB1を使用していますが、残りは表示されません
- Cでは、EDITC1を使用していますが、残りは表示されません
「インストール」カスタムアクションでは、プロパティを次のように設定しています。
- 引数:空白
- 状態:空白
- CustomActionData:/ MYPARAM1 = [EDITA1] / MYPARAM2 = [EDITB1] / MYPARAM3 = [EDITC1]
- InstallerClass:True
インストーラークラスでは、インストールはオーバーライドされます
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
// This is to display the Parameters
// It comes up blank. No Parameters.
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string s in Context.Parameters.Keys)
{
sb.Append(s);
sb.Append(":");
sb.AppendLine(Context.Parameters[s]);
}
//throw new InstallException(sb.ToString());
//This returns TRUE.
//throw new InstallException(Context.Parameters.ContainsKey("MYPARAM1").ToString());
string x= Context.Parameters["MYPARAM1"];
if (string.IsNullOrEmpty(x))
{
throw new InstallException("Missing parameter 'MYPARAM1'");
}
<snip>
}
アプリを実行すると、MYPARAM1が空になるため、最後にInstallExceptionが表示されます。
インストールの先頭にテストコードの2つのチャンクを追加しました。1つ目は、コマンドラインに入力する必要のあるすべてのパラメーターを含む文字列を作成します。パラメータがまったく取得されません。2番目のチャンクは「TRUE」を報告します。これは、キー「MYPARAM1」がコマンドラインにあったことを意味します。最初と2番目のチャンクは一致しません。どうすればいいの?
実験として、文字列をMYPARAM1ではなく/MYPARAM1に変更してみました。それは役に立ちませんでした。