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
中列出了两次
- 已指定
fileType
和 file
并调用 Install-ChocolateyPackage
,它只有 filetype
(但由于部分参数,PowerShell 将两个参数传递给 filetype
名字匹配)
- 通过了
@packageArgs
和 file
作为参数
我们已将此问题添加到 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
因此,我认为,只要转到旧版本,其他人也可能同样适用。
我正在尝试创建一个 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
中列出了两次
- 已指定
fileType
和file
并调用Install-ChocolateyPackage
,它只有filetype
(但由于部分参数,PowerShell 将两个参数传递给filetype
名字匹配) - 通过了
@packageArgs
和file
作为参数
我们已将此问题添加到 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
因此,我认为,只要转到旧版本,其他人也可能同样适用。