如何通过Chocolatey向MSI安装程序传递安装参数(类似PowerShell的-ArgumentList)
Chocolatey向MSI安装程序传递自定义参数的正确方案
1 打包时内置参数到silentArgs的正确写法
你之前的写法报错是因为不符合MSI的参数传递规范:MSI自定义公共属性必须使用大写属性名=值的格式,不能用冒号分隔,也不能用单引号包裹值,同时PowerShell中双引号嵌套需要用反引号(`)转义。
正确示例:
silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`" CUSTOMPARAM1=`"dummydata`" CUSTOMPARAM2=`"dummydata`""
注意:你的MSI安装包内定义的自定义属性必须是全大写的公共属性,否则参数不会生效
2 安装时通过--install-arguments动态传参的正确写法
之前参数未传递成功通常是两个原因:一是安装脚本未配置接收外部参数,二是命令行引号转义错误。
前置要求(打包侧配置)
确保你的安装脚本(install.ps1)中调用MSI安装的函数支持接收外部参数,使用官方提供的Install-ChocolateyPackage函数默认支持该能力,无需额外配置,示例:
Install-ChocolateyPackage -PackageName $packageName ` -FileType 'msi' ` -SilentArgs "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`"" ` -File $fileLocation
命令行传参格式
(1)CMD环境执行
choco install <pckgName> --install-arguments="CUSTOMPARAM1=\"dummy.data\" CUSTOMPARAM2=\"value with space\""
(2)PowerShell环境执行
推荐用外层单引号包裹避免转义:
choco install <pckgName> --install-arguments='CUSTOMPARAM1="dummy.data" CUSTOMPARAM2="value with space"'
如果要用双引号做外层包裹,需要用反引号转义内层双引号:
choco install <pckgName> --install-arguments="CUSTOMPARAM1=`"dummy.data`" CUSTOMPARAM2=`"value with space`""
3 验证方式
安装时添加--verbose参数,查看Chocolatey输出的最终调用msiexec的命令行,确认自定义参数是否被正确拼接;也可以直接打开生成的MSI安装日志,搜索自定义参数名称,确认参数是否传入MSI。
内容的提问来源于stack exchange,提问作者YM_coding
相关产品推荐
相关产品推荐

