Choco 安装问题与 chocolateyinstall.ps1 或 nuspec 文件

Choco install issue with chocolateyinstall.ps1 or nuspec file

我正在尝试创建一个 Chocolatey 包,并且能够 "choco pack" 和 "choco push" 到本地 chocolatey.server(简单服务器)存储库。我已将 C:\ProgramData\Chocolatey\config\chocolatey.config 配置为指向本地 chocolatey.server URL。当我尝试 运行

choco install test1

我收到以下错误:

The package test1 wants to run 'chocolateyinstall.ps1'. Note: If you don't run this script, the installation will fail. Note: To confirm automatically next time, use '-y' or consider setting 'allowGlobalConfirmation'. Run 'choco feature -h' for more details. Do you want to run the script?([Y]es/[N]o/[P]rint): Y

ERROR: Cannot bind parameter because parameter 'file' is specified more than once. To provide multiple values to parameters that can accept multiple v alues, use the array syntax. For example, "-parameter value1,value2,value3". The install of nimatest was NOT successful. Error while running 'C:\ProgramData\chocolatey\lib\test1\tools\chocolateyinstall.ps1'. See log for details.

Chocolatey installed 0/1 packages. 1 packages failed. See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Failures - test1 (exited -1) - Error while running 'C:\ProgramData\chocolatey\lib\test1\tools\chocolateyinstall.ps1'. See log for details.

在我的 test.nuspec 中,我有以下内容:

<files>
  <!-- This section controls what actually gets packaged into the Chocolatey package -->
  <file src="tools*" target="tools" />
  <!-- Building from Linux? You may need this instead: <file src="tools/*" target="tools" /> -->
</files>

在我的 chocolateyinstall.ps1 我有:

$ErrorActionPreference = 'Stop';
$packageName= 'Test1'
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$fileLocation = Join-Path $toolsDir 'Test1.exe'

$packageArgs = @{
  packageName = $packageName
  fileType = 'exe'
  file = $fileLocation
  silentArgs = "/SP"
  validExitCodes= @(0, 3010, 1641)
  softwareName = 'Test1*'
  checksum = ''
  checksumType = 'md5'
  checksum64 = ''
  checksumType64 = 'md5'
}

Install-ChocolateyPackage @packageArgs

错误

错误提示您多次指定了 file 参数,这意味着您可能有以下情况之一:

  • file 在您的 $packageArgs
  • 中列出了两次
  • 已指定 fileTypefile 并调用 Install-ChocolateyPackage,它只有 filetype(但由于部分参数,PowerShell 将两个参数传递给 filetype名字匹配)
  • 通过了 @packageArgsfile 作为参数

我们已将此问题添加到 https://chocolatey.org/docs/troubleshooting

如果您已解决该方面的问题,您现在可能会遇到其他错误。请参阅下一节以了解原因。

代码

您正在尝试为 Install-ChocolateyInstallPackage, not Install-ChocolateyPackage 传递参数。

如果您点击链接,您会注意到 Install-ChocolateyInstallPackage 用于本地嵌入或 UNC 共享二进制文件的区别,其中 Install-ChocolateyPackage 用于拉取远程资源。

创建包推荐

当您创建包时,我们强烈建议您使用 choco new(来自最新发布的 Chocolatey 版本),因为它生成的包中包含差异文档,这些差异文档已包含在生成的 chocolateyInstall.ps1 中.我们称之为 "just in time documentation".

虽然根据您的代码看来您确实使用了 choco new,但我只是想补充一点,最新版本将提供有关创建包的最有用的文档。

我在安装 Redis 时遇到了类似的问题,我设法通过转到旧版本 [已弃用] 来解决它,命令:

choco install redis-64

因此,我认为,只要转到旧版本,其他人也可能同样适用。