MSI 错误 1500:InstallShield Premium 无法 运行 辅助嵌入式安装 EXE

MSI Error 1500: InstallShield Premium Cannot Run Secondary Embedded Installation EXE

我使用 InstallShield Premium 2012 为我自己的 Windows EXE 编写了安装脚本。但是,我的 EXE 最终依赖于名为 AccessDatabaseEngine.exe 的 Microsoft EXE 提供的存在组件。

为了 运行 这个 AccessDatabaseEngine.exe 可执行文件与我的安装一起,我将它添加为嵌入式二进制资源,然后使用自定义操作向导启动 AccessDatabaseEngine.exe 作为 "Deferred Execution in System Context" 作为 "After PublishFeatures" 安装执行序列。这按预期工作: AccessDatabaseEngine.exe 在我的安装程序完成大部分工作后启动。

但是,一旦我看到 AccessDatabaseEngine.exe 的 UI 并确认其 UI 提示,我就会看到 "Error 1500",它表明另一个安装正在进行中。

我知道两个 MSI 软件包不能同时 运行ning,除非您调整注册表以允许它,我不想在我客户的工作站上这样做 Windows 7 台 32 位机器。

我想成功实施以下选项之一:

选项一:让用户启动我的 Setup.exe 程序,该程序将在某个时候启动 Microsoft AccessDatabaseEngine.exe 而不会生成任何错误消息。我只是不知道如何在不导致错误 1500 出现的情况下做到这一点...

选项二:如果有可能以某种方式将我的 Setup.exe 与 Microsoft 的 AccessDatabaseEngine.exe 打包成一个 EXE,那么我可以为我的最终用户提供该单个 EXE,它会首先执行嵌入 Setup.exe,一旦完成,它将执行 AccessDatabaseEngine.exe.

我意识到我可以将选项二实现为 .bat(批处理)文件,但我只想向我的最终用户提供一个 EXE,并让该 EXE 安装我的软件正常运行所需的一切。

有什么想法吗?

您在这里描述的正是 InstallShield 的先决条件的设计目的。从“工具”菜单启动先决条件编辑器并添加文件、命令行和携带、安装和检测 AccessDatabaseEngine.exe 的已安装足迹的条件;然后使用可再发行组件视图将新的先决条件包含在您的项目中。

一旦您正确完成此操作,InstallShield 的安装启动程序将检查是否存在先决条件足迹,如果不存在,它将 运行 描述的先决条件。由于这是在启动主 .msi 文件之前完成的,因此可以避免同时安装两个 .msi 文件。

参见Defining InstallShield Prerequisites, Creating an InstallShield Prerequisite, and Setting Installation Conditions for an InstallShield Prerequisite in the help for more details. For defining where these end up in your built installer, see Specifying the Run-Time Location for InstallShield Prerequisites at the Release Level or Specifying a Run-Time Location for a Specific InstallShield Prerequisite。请注意,当添加先决条件的依赖项时,它们通常使用发布级别设置,因此除非您真的想要混合位置,否则最好在发布中指定它。

显然有两个设置可以确定先决条件是在其自己的单独文件夹中(包含 setup.exe 的文件夹下方的发布文件夹),还是嵌入到单个 setup.exe 文件。

第一个设置在应用程序数据下的安装设计器中可用 |可交付成果。找到你的 PRQ 先决条件,上面列出了一个复选标记,右键单击它,然后查看属性。您将看到“生成位置”下拉列表——其中一个选项是“提取自 Setup.exe”。我的就是这样设置的。

但是还有第二个设置,它在安装设计器的媒体部分,在版本下。在我的项目中,我有一个 Releases 根,然后是一个 PROJECT_ASSISTANT 分支,然后是一个 SINGLE_EXE_IMAGE 分支。我左键单击 SINGLE_EXE_IMAGE 并查看其 属性 sheet。在该列表的底部附近有一个条目,上面写着 Setup Prerequisite Location。双击右侧的列(其中列出了它的值),您将在其中看到一个选项,其中还显示“Extract From Setup.exe”。

第二个设置覆盖了可交付成果部分中指定的设置,这就是为什么它没有按照先决条件设置中指定的那样工作。那是因为我使用的是 "Copy From Source Media" 设置。

因此,如果您有多个先决条件并且您希望所有这些都包含在 setup.exe 中,那么可以使用从 Setup.exe 中提取设置。但是,如果您更喜欢配置先决条件结束的位置,请在发布的设置先决条件位置部分中选择遵循个人选择选项,然后确保您为每个先决条件选择了正确的选项。

即使其他人在之前的回答中建议这样做,我也不清楚这些解释,我浪费了很多时间才最终发现实际发生了什么。