InstallShield 2025 Basic MSI:如何向PowerShell延迟自定义操作传递属性?
在InstallShield Premier 2025的Basic MSI中给系统上下文PowerShell延迟自定义操作传递属性
前提说明
延迟自定义操作无法直接访问MSI属性,必须通过CustomActionData传递;新版InstallShield基于.NET CLR运行PowerShell,旧版教程的get-property方法已不再适用,需按以下步骤配置:
步骤1:创建Set Property自定义操作(类型51)
- 在InstallShield的Custom Actions视图中,右键点击Immediate Execution节点,选择New Custom Action > Set Property
- 配置以下参数:
- Name:自定义名称(例如
Set_PS_CustomActionData) - Property Name:填写你的PowerShell延迟自定义操作的准确名称(必须完全匹配大小写)
- Property Value:采用键值对格式传递属性,例如
TEST_ID=[TEST_ID] - Execution Scheduling:保持为Immediate Execution,确保在延迟CA之前执行
- In-Script Execution:选择Not in Script
- Name:自定义名称(例如
步骤2:配置PowerShell延迟自定义操作
- 在Custom Actions视图中,右键点击Deferred Execution in System Context节点,选择New Custom Action > PowerShell Script
- 配置核心参数:
- Name:设置为步骤1中
Property Name填写的名称(例如PS_Deferred_Action) - Script File:选择你的PowerShell脚本文件
- Execution Scheduling:设为Deferred Execution in System Context
- 勾选Include script in package
- Name:设置为步骤1中
步骤3:修改PowerShell脚本获取属性
删除旧版的get-property调用,改用InstallShield新版PowerShell环境提供的Get-MsiCustomActionData cmdlet解析传递的属性:
# 获取CustomActionData并解析属性 $customActionData = Get-MsiCustomActionData $testId = $customActionData.TEST_ID # 验证获取结果(可写入MSI日志) Write-MsiLog "Received TEST_ID: $testId" # 后续业务逻辑...
关键注意事项
- 确保Set Property CA的执行顺序早于PowerShell延迟CA:在Sequences视图中,将
Set_PS_CustomActionData放在InstallInitialize之后、目标延迟CA之前 - 若
TEST_ID是用户输入或动态属性,需确保它是Public属性(名称全大写),否则无法在即时CA中传递 - 避免在CustomActionData值中使用特殊字符,若必须使用,需按MSI规则转义
内容的提问来源于stack exchange,提问作者Dave S
相关产品推荐
相关产品推荐

