我可以在Chocolatey包中包含MSI文件吗?

时间:2015-08-18 20:12:45

标签: package chocolatey

我可以将MSI文件或ISO图像放入Chocolatey包中吗?

所以当我choco install foo时,它不会从其他网址下载MSI,而是从包内取出文件?

2 个答案:

答案 0 :(得分:8)

是的,这绝对是可能的。这实际上就是ChocolateyGUI包的功能。你可以在这里看到它的.nuspec文件:

https://github.com/chocolatey/ChocolateyGUI/blob/develop/nuspec/chocolatey/ChocolateyGUI.nuspec

<?xml version="1.0"?>
<package>
  <metadata>
    <id>chocolateygui</id>
    <version>$version$</version>
    <title>Chocolatey GUI</title>
    <authors>Chocolatey</authors>
    <owners>Chocolatey</owners>
    <projectUrl>https://github.com/chocolatey/ChocolateyGUI</projectUrl>
    <projectSourceUrl>https://github.com/chocolatey/ChocolateyGUI</projectSourceUrl>
    <packageSourceUrl>https://github.com/chocolatey/ChocolateyGUI/tree/develop/nuspec/chocolatey</packageSourceUrl>
    <iconUrl>https://raw.githubusercontent.com/chocolatey/choco/master/docs/logo/chocolateyicon.gif</iconUrl>
    <licenseUrl>https://raw.githubusercontent.com/chocolatey/ChocolateyGUI/develop/LICENSE</licenseUrl>
    <bugTrackerUrl>https://github.com/chocolatey/ChocolateyGUI/issues</bugTrackerUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>
Chocolatey GUI is a nice GUI on top of the Chocolatey command line tool.

## Features

* View all **installed** and **available** packages
* **Update** installed but outdated packages
* **Install** and **uninstall** packages
* See detailed **package information**

## Notes
This package will only work correctly on Windows 7 SP1 through Windows 10 (1708) or     Windows Server 2008 R2 SP1 through Windows Server 2016, and requires .NET Framework     4.5.2 at minimum.
  </description>
    <summary>A GUI for Chocolatey</summary>
  <releaseNotes>
All release notes for Chocolatey GUI can be found on the GitHub site -     https://github.com/chocolatey/ChocolateyGUI/releases
  </releaseNotes>
    <tags>chocolateygui chocolatey admin foss</tags>
    <dependencies>
      <dependency id="Chocolatey" version="[0.10.3, 0.11)" />
    </dependencies>
  </metadata>
  <files>
    <file src="chocolateyInstall.ps1" target="tools"/>
    <file src="chocolateyUninstall.ps1" target="tools"/>
    <file src="..\..\BuildArtifacts\ChocolateyGUI.msi" target="tools"/>
    <file src="..\..\LICENSE" target="tools\LICENSE"/>
    <file src="VERIFICATION.txt" target="tools"/>
  </files>
</package>

然后,正如您所指出的那样,您将使用Install-ChocolateyInstallPackage来执行安装,然后安装将使用包中的本地MSI,而不是首先下载它。您可以在此处查看ChocolateyGUI的安装脚本:

https://github.com/chocolatey/ChocolateyGUI/blob/develop/nuspec/chocolatey/chocolateyInstall.ps1

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

$packageArgs = @{
  packageName   = $env:ChocolateyPackageName
  softwareName  = 'Chocolatey GUI'
  file          = $fileLocation
  fileType      = 'msi'
  silentArgs    = "/qn /norestart /l*v `"$env:TEMP\$env:ChocolateyPackageName.$env:ChocolateyPackageVersion.log`""
  validExitCodes= @(0,1641,3010)
}

Install-ChocolateyInstallPackage @packageArgs

Remove-Item -Force $packageArgs.file

您可以使用ISO映像文件执行完全相同的操作,并且在此处使用该ISO文件的既定最佳实践进行了演练:

How To Mount An Iso In Chocolatey Package

注意:如果您打算将软件包推送到Chocolatey.org,请记住MSI / ISO文件的大小。如果这个特别大,最好不要将它包含在nupkg中,而是使用下载链接。

答案 1 :(得分:2)

与Gary said一样,您可以在包中包含任意文件。

我强调这并不是一个好主意。您必须自己下载包文件(这是choco install foo时发生的情况)。在包中移动MSI / ISO意味着您将使用包文件下载它,并根据大小减慢控制台上的反馈。

使用正确的帮助程序和外部URL可以为您提供很多很棒的行为,其中最重要的是下载进度条!

如果文件存储有问题,有许多免费选项,包括:GitHub,Google Drive,DropBox等。如果您正在创建&#34;内部&#34;适用于贵公司的软件包,网络共享可以使用file://个网址。