将参数传递给 msi

Passing arguments to msi

chocolatey documentation 中,他们声明为了将参数传递给 MSI 需要使用以下参数:

--ia, --installargs, --installarguments, --install-arguments=VALUE InstallArguments - Install Arguments to pass to the native installer in the package. Defaults to unspecified.

我试过假设它会自动附加到 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 

让我们以安装 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), rather than Install-ChocolateyPackage (https://chocolatey.org/docs/helpers-install-chocolatey-package)