将参数传递给MSI

时间:2019-02-04 13:36:41

标签: chocolatey

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 

1 个答案:

答案 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-ChocolateyInstallPackagehttps://chocolatey.org/docs/helpers-install-chocolatey-install-package),而不是Install-ChocolateyPackagehttps://chocolatey.org/docs/helpers-install-chocolatey-package