如何在MSI的InstallExecuteSequence启动前运行.NET Runtime安装程序?
在MSI中提前启动.NET Runtime安装的可行方案
核心思路
要在InstallExecuteSequence启动前(避免执行互斥锁冲突)以高权限运行.NET Runtime安装程序,关键是利用即时模式自定义动作(Immediate Custom Action),并将其安排在InstallInitialize之前执行。
具体实现步骤
创建高权限即时自定义动作
- 定义类型为
34的自定义动作(代表:即时执行、不模拟当前用户,即使用系统账户权限运行)。 - 命令行示例:
msiexec /i "[Temp]\dotnet-runtime-xxx.msi" /qn /norestart/qn:无UI模式,适配无交互场景/norestart:避免触发系统重启(可根据.NET Runtime安装包需求调整)
- 如果将.NET Runtime MSI内嵌到主MSI中,需先添加
ExtractBinary自定义动作,将内嵌文件提取到[Temp]目录,再执行上述命令。
- 定义类型为
调整序列顺序
- 在
InstallExecuteSequence表中添加该自定义动作,设置Sequence值小于InstallInitialize的默认序列值(通常为1500,比如设为1400),确保在执行阶段启动前完成.NET Runtime安装。
- 在
添加安装前置检查
- 为避免重复安装,可在自定义动作中先检查.NET Runtime是否已存在:
- 检查对应版本的注册表项(例如:
HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full下的Version值) - 如果已安装,则跳过自定义动作的执行。
- 检查对应版本的注册表项(例如:
- 为避免重复安装,可在自定义动作中先检查.NET Runtime是否已存在:
注意事项
- 确保.NET Runtime的MSI文件能被MDM部署环境访问:要么内嵌到主MSI,要么和主MSI放在同一部署路径下。
- 测试自定义动作的权限:由于MDM以系统上下文运行主MSI,类型
34的自定义动作会继承系统权限,满足高权限需求。 - 处理安装失败场景:可在自定义动作中添加错误处理,若.NET Runtime安装失败,终止主MSI的安装流程。
内容的提问来源于stack exchange,提问作者Yola
相关产品推荐
相关产品推荐

