在chocolatey documentation中,他们指出,要将参数传递给MSI,需要使用以下参数:
-ia,-installargs,-installarguments,-install-arguments = VALUE InstallArguments-安装参数以传递给本地安装程序 包装。默认为未指定。
我尝试假设它将自动附加到MSI执行中,但未传递参数。
然后,我查看了我的Chocolateyinstall.ps1,并注意到silentArgs参数具有默认初始化,该参数看起来就像传递给MSI的参数一样。我试图删除它,希望它将参数传递给MSI,但还是没有运气。
所以问题是:使用cinst或choco install时如何从命令行将参数传递给MSI?
这是我的Chocolateyinstall.ps1,非常标准:
$ErrorActionPreference = 'Stop'; # stop on all errors
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$packageArgs = @{
packageName = $env:ChocolateyPackageName
unzipLocation = $toolsDir
fileType = 'msi'
file = Get-Item $toolsDir\*.msi
checksumType = 'sha256' #default is md5, can also be sha1, sha256 or sha512
# MSI
silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`""
validExitCodes= @(0, 3010, 1641)
}
Install-ChocolateyPackage @packageArgs
答案 0 :(得分:1)
让我们以Chocolatey GUI软件包的安装为例,该软件包也使用MSI。如果运行以下命令:
choco install chocolateygui --install-arguments="'/forcerestart'"
此附加参数将传递给基础MSI,这将导致在MSI安装完成后重新启动计算机。
注意::这将带来未完成Chocolatey安装的副作用,因此该软件包实际上不会被标记为已安装。这只是增加传递给MSI的参数的示例。
另一个示例是运行以下命令:
choco install chocolateygui --install-arguments="'/forcerestart'" --override-arguments
第二个参数--override-arguments
仅使传入的参数受到尊重。这样做会导致安装阻塞,因为静默参数已从软件包中删除。
因此,长话短说,听起来您的工作完全正确。如果您可以共享要使用的确切命令,则可能有助于弄清楚发生了什么。
作为旁注,看起来您正在创建嵌入式Chocolatey包,这意味着MSI实际上包含在nupkg文件中。这完全有效,但是,您应该使用Install-ChocolateyInstallPackage
(https://chocolatey.org/docs/helpers-install-chocolatey-install-package),而不是Install-ChocolateyPackage
(https://chocolatey.org/docs/helpers-install-chocolatey-package)