使用chocolateyinstall.ps1或nuspec文件

时间:2016-07-14 14:06:31

标签: chocolatey

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

choco install test1

我收到以下错误:

  

包test1想要运行'chocolateyinstall.ps1'。注意:如果你   不运行此脚本,安装将失败。注意:确认   下次自动使用'-y'或考虑设置   'allowGlobalConfirmation'。运行'choco feature -h'了解更多详情。做   你想运行脚本吗?([Y] es / [N] o / [P] rint):Y

     

错误:无法绑定参数,因为指定了参数“file”   不止一次。为可以的参数提供多个值   接受多个值,使用数组语法。例如,   “ - 参数value1,value2,value3”。 nimatest的安装不是   成功的。运行时出错   'C:\ ProgramData \的巧克力\ LIB \ test1的\工具\ chocolateyinstall.ps1'。   有关详细信息,请参阅日志。

     

Chocolatey安装了0/1包。 1个包失败了。请参阅日志   详情(C:\ ProgramData \ chocolatey \ logs \ chocolatey.log)。

     

故障     - test1(退出-1) - 运行'C:\ ProgramData \ chocolatey \ lib \ test1 \ tools \ chocolateyinstall.ps1'时出错。   有关详细信息,请参阅日志。

在我的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

2 个答案:

答案 0 :(得分:6)

错误

错误告诉您您多次指定file参数,这意味着您可能会遇到以下情况之一:

  • file
  • 中列出了$packageArgs两次
  • 指定了fileTypefile并且调用了Install-ChocolateyPackage,其中只有filetype(但由于部分参数名称匹配,PowerShell会将这两个参数传递给filetype
  • @packageArgsfile作为参数传递

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

如果你已经解决了这个方面,你现在可能会遇到其他错误。请参阅下一节以了解原因。

守则

您正在尝试传递Install-ChocolateyInstallPackage的参数,而不是Install-ChocolateyPackage

如果您按照链接进行操作,您会注意到Install-Chocolatey 安装包适用于本地嵌入或UNC共享二进制文件的区别,其中Install-ChocolateyPackage用于提取远程资源。

创建包推荐

当您创建包时,我们强烈建议您使用choco new(来自最新发布的Chocolatey版本),因为它生成的包装中包含已生成的chocolateyInstall.ps1中已包含的差异的文档。我们将此称为“及时文档”。

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

答案 1 :(得分:0)

我正在安装Redis并遇到类似的问题,我设法通过使用旧版本[Deprecated]来解决此问题,命令:

choco install redis-64

因此,只要转到我认为的旧版本,其他人都可以使用同样的方法。