使用 installShield 在 Basic MSI 项目中设置可执行 运行 顺序

Set executable run order in Basic MSI project with installShield

我使用项目助手使用 InstallShield 2016 专业版创建了一个 Basic MSI 安装程序项目。我没有创建任何 components/features(只创建了 deafulkt 功能)。 安装程序应该首先 运行 控制台应用程序(我作为安装程序的一部分添加,但不会安装),如果没有出现错误,只需将 WPF 应用程序(DLL 和 .exe)复制到客户端位置。

理想的步骤是,在提出采访对话之后:

  1. 如果 he/she 要继续
  2. 则提示使用
  3. 如果 [no] 关闭进程,如果 [yes],则显示接受三个字段的自定义对话框 SQL 连接字符串
  4. 然后,使用给定的参数作为输入,运行 控制台应用程序。控制台应用程序只是 运行 一些 SQL 脚本,但它不会被安装,它是安装程序的一部分
  5. 完成此步骤后(如何检查是否完成且没有错误发生?)复制项目助手中设置的文件(wpf .exe 和 DLL)。

我在文档中读到,使用自定义操作可以 运行 可执行文件,但我无法理解或找到有关如何将参数(命令行除外)传递到控制台应用程序或获取的详细信息控制台应用程序产生的最终状态。

任何人都可以建议我如何实现这些步骤吗?

更新

在 InstallShield 中,可以在自定义操作中创建属性,然后在其他需要的地方调用这些值,如:[PropertyName]。

我可以这样做来为可执行命令行参数添加三个属性:
i=[DB_CONN_INSTANCE_NAME] u=[DB_CONN_USER_NAME] p=[DB_CONN_PWD]

how can I check it is finished and no errors occurred?

您的控制台应用程序应该 return 退出代码。 0(零)表示成功,任何其他数字表示失败。在您的自定义操作 (CA) 属性中,您应该为 "Return Processing" 属性 选择 "Synchronous (Check exit code)"。由于您希望在安装时 运行 此 CA,因此您应该为 "In-Script Execution" 属性 选择 "Deferred Execution"。您至少应该写条件,因为您希望只在安装期间发生这种情况,而不是在用户删除产品时发生,是吗?在这种情况下完成 "Install Exec Condition"。如果您设置了以上所有内容,我相信此 CA 的 MSI 类型编号将为 1026。

where I can find some more detailed documentation?

给你:Custom Actions

编辑:

If I test the application I do not get any hint that the console app ran. Plus how can I then specify to proceed with the second custom function (that should install the WPF app) if the executable is successful?

您需要设置 "Install Exec Sequence" 以便在特定时间 运行 您的 CA。延迟类型的 CA 必须安排在 "InstallFiles" 之后的某处。有关如何安排 CA 的更多信息,请阅读:Sequencing Custom Actions。当您使用 "Synchronous (Check exit code)" 属性 安排您的控制台应用程序 CA 时,安装程​​序将等待您的 CA 退出,并且仅在此之后继续序列。您的第二个 CA 应该安排在第一个 CA 之后。很简单,你肯定是在正确的轨道上。

Is it possible to debug the steps for a Basic MSI?

我不知道你在这里问什么。据我了解,您正在使用 InstallShield Studio,因此 运行 调试并单步执行。如果您询问有关调试 CA 本身的问题,您应该查看以下资源:Debugging Custom Actions

您可以在 Run custom program during installation

上参考此 link