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