我正在使用高级安装程序10.7.1。我正在添加'run windows powershell script'的自定义操作。此脚本的作用是检查安装程序是否在azure vm上运行。如果是,那么它才允许用户安装。该脚本在vm上运行正常,我已经检查过了。但现在我需要根据脚本的结果显示错误信息。这意味着我必须在脚本中设置一些属性,在此基础上我将显示错误消息。 任何人都可以通过powershell脚本告诉我如何设置高级安装程序的属性。
答案 0 :(得分:1)
这是limitation of Windows Installer,而不是Advanced Installer。 PowerShell无法访问安装的Session对象,因此无论用于构建MSI的工具如何,都无法将PowerShell脚本中的属性设置/获取到MSI中。
可用于设置属性的唯一自定义操作(当然,计划为立即)是VBS脚本(内联或附加文件)或用C++或{{0}}编写的DLL {3}}。在C#中更容易,因为您可以访问许多.NET API(但您也需要.NET Framework位于最终用户计算机上)。
<强> @ravikanth 强>
它只需要脚本文本,并且没有基于返回值的关联操作。怪异!
这是Windows Installer的工作方式,即构建所有MSI包的技术。更具体地说,运行到MSI中的自定义操作无法使用返回代码与主安装进度通信“他们想要什么”。 Windows Installer仅接受C#,对于Advanced Installer中的PowerShell自定义操作,返回代码由安装程序在后台控制。
在安装中使用PS脚本的场景是用户通常需要他们在机器上进行某些配置,以便为安装做好准备。 (比如安装/激活Windows组件,配置网络凭据等...)对于安装程序中非常好且功能强大的自定义代码,DLL应该用作自定义操作,因为它们提供完整的通信周期(可以获取和设置属性)并且还可以很好地调试到IDE中(通过附加到安装过程)。
答案 1 :(得分:0)
我不知道Advanced Installer的工作原理,但您始终可以从脚本返回一个值,然后在调用者中使用该值。例如,
#Custom Script action
#Get the VM details
If (AzureVM) {
$true
} else {
$false
}
从脚本获得结果后,使用它来切换安装路径或显示消息。
答案 2 :(得分:0)
供以后参考:
从脚本设置属性值(用于即时自定义操作)
要设置一个属性,只需在您的脚本中包含一行具有以下语法的行:
AI_SetMsiProperty YOUR_PROP <VALUE>
其中 YOUR_PROP
是属性,<VALUE>
是分配给它的值。
注意:这仅适用于设置为立即运行的脚本。