我可以在 Chocolatey 包中包含 MSI 文件吗?
Can I include an MSI file inside a Chocolatey package?
我可以将 MSI 文件或 ISO 映像放入 Chocolatey 包中吗?
所以当我choco install foo
时,它不会从另一个URL下载MSI,而是从包中获取文件?
是的,这绝对有可能。这实际上正是 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 中,而是使用下载 link.
像 Gary 一样,您可以在包中包含任意文件。
我要强调这不是个好主意。您必须下载包文件本身(这就是您 choco install foo
时发生的情况)。将 MSI/ISO 移动到包内意味着您将与包文件一起下载它,并且根据大小,减慢控制台的反馈速度。
使用正确的助手和外部 URL 会给您带来很多很棒的行为,其中最不重要的是下载进度条!
如果文件存储有问题,有许多免费选项,包括:GitHub、Google Drive、DropBox 等。如果您正在为您的公司创建 "internal" 包,网络共享可以使用 file://
个 URL。
我可以将 MSI 文件或 ISO 映像放入 Chocolatey 包中吗?
所以当我choco install foo
时,它不会从另一个URL下载MSI,而是从包中获取文件?
是的,这绝对有可能。这实际上正是 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 中,而是使用下载 link.
像 Gary
我要强调这不是个好主意。您必须下载包文件本身(这就是您 choco install foo
时发生的情况)。将 MSI/ISO 移动到包内意味着您将与包文件一起下载它,并且根据大小,减慢控制台的反馈速度。
使用正确的助手和外部 URL 会给您带来很多很棒的行为,其中最不重要的是下载进度条!
如果文件存储有问题,有许多免费选项,包括:GitHub、Google Drive、DropBox 等。如果您正在为您的公司创建 "internal" 包,网络共享可以使用 file://
个 URL。