首页 > 解决方案 > 如何使用 Chocolatey 将安装参数直接传递给 MSI 安装程序(如 PowerShell 中的 -ArgumentLIist)?

问题描述

我想将自定义参数直接传递给 MSI 安装程序。我尝试在silentArgs中添加这些参数,但是当我这样做时,在我运行 choco install 后,我得到以下信息(之后安装被中止):

在此处输入图像描述

这就是我传递这些参数的方式silentArgs

silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`" /CUSTOMPARAM1:'dummydata' /CUSTOMPARAM2:'dummydata'"

我尝试了不同的语法(而不是使用 :,我使用了 =,但结果仍然相同)。然后我尝试choco install <pckgName> --install-arguments="CUSTOMPARAM1=""dummy.data"""了,但是通过这种方法确实安装了包,但参数没有传递给 MSI 安装程序。我搜索了某种与--install-arguments它期望的格式(例如引号=:等)相关的文档,但没有找到任何东西。

TLDR;我想通过 choco 将自定义参数/参数传递给我的 MSI 安装程序。

标签: packagewindows-installernuget-packagepackage-managerschocolatey

解决方案


在我看来,您两次传递了相同的参数,一次是在您的包的静默参数中,另一次是在调用choco install. 我认为这就是问题所在,因为我相信msiexec它将使用它为给定参数找到的第一个值。如果要覆盖静默参数,则需要将--override-arguments参数添加到choco install. 这种方法的缺点是这将覆盖所有烘焙到包中的静默参数,因此您还需要提供安装包所需的所有静默参数。

如果这是您开发的包(看起来可能是这样),我建议改用包参数。通过这种方式,您可以保留默认的静默安装参数,并且ChocolateyInstall.ps1您可以将每个参数添加CUSTOMPARAM-SilentArgs通过包参数传入或可选地为未传入的参数设置默认值(或省略额外参数)。如果出现以下情况,您也可以抛出错误未提供要求包参数。


推荐阅读