installation - 如何在静默模式下运行 MSI 安装程序时运行自定义操作

标签 installation installshield windows-installer

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

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

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

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

更新:按照 Michael 的建议,将自定义操作放入 InstallExecuteSequence 后,它开始以静默模式执行。但现在的问题是它开始在 UI 模式下执行两次,因为已经通过单击 InstallUISequence 期间出现的对话框之一的按钮执行了相同的操作。因此,我想通过仅在我以静默模式运行安装程序时将其放入 InstallExecuteSequence 来执行我的自定义操作(以便它仅在我处于 UI 模式时执行一次)。

最佳答案

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

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

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

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

enter image description here

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

关于installation - 如何在静默模式下运行 MSI 安装程序时运行自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646690/

相关文章:

hadoop - 无法安装Pig版本0.17.0;错误:无法找到Pig-core-h2.jar。做 'ant jar',然后再试一次

android - 错误 : "Failed to install apk on device ' emulator-555 4': timeout"

database - 如何更新 Access MDB 文件 - InstallShield?

Installshield 限量版 - 限制

c++ - 卸载程序不会删除复制的库到 VS2010 安装程序项目中的系统文件夹。

installation - 如何使用 installshield 2011 获取 msi 文件而不是 exe 文件

python - linux mint 中的 PyBluez 安装错误

reporting-services - 将文件从 x86 msi 安装到 x64 "Program Files"

WiX 重大升级拒绝替换现有文件!

windows - 如何使用 Squirrel.Windows 注册应用程序以在 Windows 启动时运行?