インストーラー クラスでセットアップがサイレント モードで実行されているかどうかを判断するために、このリンクのコードをたどろうとしています。しかし、 Context.Parameters["UILevel"] には値が含まれていないように見えるため、何か間違ったことをしているに違いありません。
私のセットアップ プロジェクトでは、Install にカスタム アクションを追加し、/UILevel="[UILevel]" を CustomActionData フィールドに渡しました。次に、このカスタム アクションを、以下のインストーラー クラスを含むインストーラー dll プロジェクトのプライマリ出力にリンクしました。
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
namespace CustomActionLibrary
{
[RunInstaller(true)]
public partial class MyInstaller : Installer
{
string uiLevelString = string.Empty;
public bool IsSilentInstall
{
get
{
if (!String.IsNullOrEmpty(uiLevelString))
{
int level = Convert.ToInt32(uiLevelString);
return level <= 3;
}
else
return false;
}
}
public MyInstaller()
{
InitializeComponent();
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
uiLevelString = Context.Parameters["UILevel"];
}
public override void Commit(IDictionary savedState)
{
//System.Diagnostics.Process.Start("http://www.google.ro?q=" + uiLevelString);
if (IsSilentInstall)
{
//do stuff here if it's silent install.
}
base.Commit(savedState);
}
}
}
Install にカスタム アクションを追加する場合は、Install オーバーライドで Context.Parameters["UILevel"] を取得する必要があると考えました。ただし、 Context.Parameters["UILevel"] は入力されません。私もクラスのコンストラクターでそれを取得しようとしましたが、nullref をスローし、コミット イベントではまだ何もしません。
この値を正しく取得するにはどうすればよいですか?