在.NET自定义操作中检测静默安装

如何检测安装是否以静默模式运行?

我有一个自定义应用程序,我添加了一个.msi安装项目。 我使用/ qb开关运行.msi文件,并在我的自定义安装程序c#代码中,我希望能够检测到这一点。

编辑:nobugs说测试UILevel属性。 如何从派生自System.Configuration.Install.Installer类的类访问UILevel属性?

从nobugz的提示,我做了以下:

  1. 在.msi安装项目的自定义操作视图中,我将以下内容添加到我的CustomActionData(将UILevel传递给我的自定义安装程序):

    / UILevel = “[UILevel]”

  2. 在我从基类Installer派生的代码的C#代码中,我添加了代码来获取值:

    string uiLevelString = Context.Parameters [“UILevel”];

  3. 然后解析字符串的int值很简单。 如果值<= 3,则为静默安装。

首先,我要指出InstallUtil是一个非常糟糕的模式。 它们耗尽了进程,使用CLR版本处理了进程,当它们失败时,即使在静默安装期间也会引发1001错误模式对话框。

相反,你应该使用WiX的DTF模式。

MsiGetMode(Session.Mode)在延迟执行期间受限,因此您必须序列化和反序列化UILevel。

http://www.msifaq.com/a/1044.htm