You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

步骤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

步骤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 14:33:12