将参数传递给 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)
在 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)