高级安装程序 PowerShell 脚本设置属性

4
我正在使用高级安装程序10.7.1。我正在添加“运行Windows PowerShell脚本”的自定义操作。此脚本的作用是检查安装程序是否在Azure虚拟机上运行。如果是,则只允许用户安装。脚本在虚拟机上运行良好,我已经检查过了。但现在我需要根据脚本的结果显示错误消息。这意味着我必须在脚本中设置某些属性,基于这些属性将显示错误消息。 有人能告诉我如何通过PowerShell脚本设置高级安装程序的属性吗?
3个回答

1
这是Windows Installer的限制,而不是Advanced Installer的限制。PowerShell无法访问安装的Session对象,因此您无法从powershell脚本中设置/获取属性到MSI中,无论使用哪个工具来构建MSI。

唯一可以用于设置属性(当然要安排为立即执行)的自定义操作是VBS脚本(内联或附加文件)或使用C ++C#编写的DLL。在C#中更容易,因为您可以访问许多.NET API(但您还需要在最终用户计算机上安装.NET Framework)。

@ravikanth

它只接受脚本文本,并且没有基于返回值的关联操作。奇怪!

这就是Windows Installer的工作方式,也就是所有MSI包都建立在其之上的技术。更具体地说,运行到MSI中的自定义操作无法使用返回代码与主安装进度通信“任何他们想要的”。Windows Installer仅接受一组严格定义的返回代码,对于Advanced Installer中的PowerShell自定义操作,返回代码由安装程序在后台控制。
在安装中使用PS脚本的情况是,用户通常需要使用它们来对计算机进行某些配置,以准备进行安装(例如安装/激活Windows组件,配置网络凭据等)。对于非常好和强大集成的自定义代码,应该使用DLL作为自定义操作,因为它们提供了完整的通信周期(可以获取和设置属性),还可以很好地通过IDE(通过附加到安装过程)进行调试。

0

我不知道Advanced Installer是如何工作的,但你可以从脚本中返回一个值,然后在调用者中使用该值。例如:

#Custom Script action
#Get the VM details
If (AzureVM) {
   $true
} else {
   $false
}

一旦您从脚本中获得结果,可以使用该结果来切换安装路径或显示消息。

我不认为高级安装程序是这样工作的,但还是谢谢。 - Wasiq Ali
我怀疑这更像是一个高级安装程序的问题。我快速安装并检查了自定义操作的创建方式。它只需要脚本文本,没有基于返回值的关联操作。很奇怪! - ravikanth

0

供日后参考:

从脚本中设置属性值(用于立即自定义操作)

要设置属性,只需在脚本中包含以下语法的行:

AI_SetMsiProperty YOUR_PROP <VALUE> 

其中 YOUR_PROP 是属性,<VALUE> 是分配给它的值。

注意:这仅适用于立即运行的脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接