3

我已经使用 Installshield 2014 创建了一个 MSI 安装程序。从 UI 运行它时一切正常,但是当我使用以下命令在静默模式下运行它时,我的自定义操作根本不会触发:

C:\>msiexec /i "myApplication.msi" /qn WEBURL=http://localhost/mywebapp /log  out.txt

WEBURL是自定义操作所需的属性。的值WEBURL作为参数传递给 C# 类库方法。C# 方法由我的自定义操作调用,当我在开始安装向导步骤上单击安装按钮时调用该操作。我的自定义操作总是被执行,即我保留了执行自定义操作的条件,1这意味着它在所有情况下都会执行。

在日志文件中,我还看到WEBURL正确设置了属性的值。在静默模式下运行安装程序时,我无法了解是什么阻止了我的自定义操作?

更新:正如迈克尔所建议的,在将自定义操作放入其中后,InstallExecuteSequence它开始以静默模式执行。但现在的问题是它开始在 UI 模式下执行两次,因为通过单击在InstallUISequence. 所以我想通过仅在我以静默模式运行安装程序时将其放入来执行我的自定义操作InstallExecuteSequence(以便在我处于 UI 模式时它只执行一次)。

4

1 回答 1

1

使用 运行时/qn,不会显示向导。甚至整个InstallUISequence都被跳过。因此,如果您希望您的操作始终运行,则不应仅通过单击按钮来调用它。当按钮未显示时,无法单击。

而是在InstallExecuteSequence中找到一个位置来安排它。(如果您没有其他要求,您可能仍希望在 CostFinalize 之后的某个时间安排它以反映非静默情况。)无论您是否有 UI,此安排都将运行该操作。

但是,无论您是安装还是卸载,它也会运行它,因此请更改您的条件或您的操作以将其考虑在内。最简单的方法可能是检查Installed属性是否被设置;更强大的检查可以验证相关组件的安装和操作状态。如果您需要在添加或删除功能的维护方案中有条件地执行某些操作,则后者可能是必要的。

由于您提到您还需要它在 UI 期间运行,因此您必须采取额外的步骤。您可以设置msidbCustomActionTypeFirstSequence调度选项,如下所示。

在此处输入图像描述

或者您可能必须检测场景,例如通过检查UILevel,或者在您的操作运行时设置和检查您自己的属性。您可能还需要将其拆分为多个入口点,以便您可以告诉 UI 立即执行;似乎没有区分两者的RunMode。(我是否忘记了设置的属性?)

于 2017-01-14T14:03:52.053 回答