对于管理 MSI 的安装程序包,您必须将参数传递给底层安装程序,因为安装程序希望看到它们,对于 MSI,即UPPERCASEPROPERTY="Value" NEXTPROPERTY="Another value"。否则 MSI exec 会像你看到的那样弹出,告诉你传递给它的东西不正确。
如果您正在创建包装,则有以下三种方法:
- 在包装中
- Install-Arguments(如果您使用的是无法更改的软件包,这是唯一的选择)
- 包参数(推荐)
我会更详细地介绍每一个。
在包装中 - ChocolateyInstall.ps1
实际上,您对此非常接近。您需要做的就是改变:
/CUSTOMPARAM1:'dummydata' 在
silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`" /CUSTOMPARAM1:'dummydata' /CUSTOMPARAM2:'dummydata'"
到:
CUSTOMPARAM1=`"dummydata`",例如以下(我在下面将CUSTOMPARAM1 重命名为MSIPROPERTY,表示这些必须已经作为您可以设置的属性存在于 MSI 安装程序中):
silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`" MSIPROPERTY=`"dummydata`" EXISTINGMSIPROPERTY2=`"dummydata`""
运行时安装参数 - choco install
您还可以在运行时直接将其他参数传递给安装程序。
choco install <pkgName> --install-arguments="'CUSTOMPARAM1=""dummy.data""'" (注意:引用位特定于您正在运行的 shell,cmd.exe 需要这种方式,而 powershell.exe 需要它们有点不同。)。 https://docs.chocolatey.org/en-us/choco/commands/#how-to-pass-options-switches(参见 Pass Quotes in Arguments)另请注意,这是不同的,因为它使用了 Chocolatey 文档描述的引号("'values'")。
另外,如果你想覆盖已经通过silentArgs 传递的安装参数,而不是仅仅附加到它的末尾,你想使用一个额外的开关--override-arguments。来自https://docs.chocolatey.org/en-us/choco/commands/install#options-and-switches:
-o, --override, --overrideargs, --overridearguments, --override-arguments
OverrideArguments - Should install arguments be used exclusively without appending to
current package passed arguments? Defaults to false.
封装参数
这是将包参数放在 ChocolateyInstall.ps1 中的组合,然后决定如何将这些参数传递给silentArgs。
根据文档,您需要为每个参数指定默认选项,然后您将寻求正确转换。
基于https://docs.chocolatey.org/en-us/guides/create/parse-packageparameters-argument,您可以在脚本中设置如下内容:
$pp = Get-PackageParameters
$additionalArgs = ''
if ($pp['SOMEPROPERTY']) {
$additionalArgs += " MSIPROPERTYNAME=`"$($pp['SOMEPROPERTY'])`""
}
[..snip..]
silentArgs = "/qn /norestart MSIPROPERTY=`"dummydata`" $additionalArgs"
# removed /l*v args for readability/brevity
您可能希望将这些参数添加到您的 nuspec 文件的描述中。 https://docs.chocolatey.org/en-us/guides/create/parse-packageparameters-argument#step-2-add-package-parameters-to-the-description
中概述了一种特定格式
然后你可以像这样调用 Choco 安装:
choco install <pkgName> --package-parameters="'/SOMEPROPERTY=dummy.data'"
包参数的好处: