【问题标题】:How should I use the tools path in my chocolatey package to let people choose an installation directory?我应该如何使用我的巧克力包中的工具路径让人们选择安装目录?
【发布时间】:2022-10-13 09:28:50
【问题描述】:

我正在创建一个只解压缩文件的 Chocolatey 包。我想让用户选择解压缩的位置。 Others have tried to do the same thing, and the answer was to use an environment variable

看起来像there's an environment variable just for this purposeChocolateyToolsLocation

这是我的chocolateyinstall.ps1

$ErrorActionPreference = 'Stop'; # stop on all errors
$toolsDir   = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$installationDir   = "$(Get-ToolsLocation)"
$fileLocation = Join-Path $toolsDir 'MyApp.zip'

$packageArgs = @{
  packageName   = $env:ChocolateyPackageName
  unzipLocation = $installationDir
  file          = $fileLocation

  softwareName  = 'myapp*' #part or all of the Display Name as you see it in Programs and Features. It should be enough to be unique
}

Get-ChocolateyUnzip $fileLocation $installationDir

所以这里有两个概念:

  • “工具目录”-C:\ProgramData\chocolatey\lib\myapp
  • “工具位置”-$env:ChocolateyToolsLocation

我有这个权利吗?如果用户希望更改安装目录,则应更改“工具位置”,但“工具目录”始终是 Chcolatey 在其 lib 目录中解压缩包的位置?

【问题讨论】:

    标签: chocolatey


    【解决方案1】:

    $toolsDirchocolateyInstall.ps1 中的一个局部变量,定义为 "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"。这会将其设置为chocolateyInstall.ps1 所在的目录。因此,如果chocolateyInstall.ps1 位于包内的文件夹(如tools)中,那么它不是Chocolatey 包解包到的位置,它是该位置的子文件夹(例如 C:ProgramDatachocolateylibcurlC:ProgramDatachocolateylibcurl ools)。

    $env:ChocolateyToolsLocation 是一个环境变量,用户可以将其设置为他们想要的任何文件夹。它默认为C: ools,但可以由 Chocolatey 之外的用户使用任何可以设置环境变量的常规方法来设置或修改。它不应直接在chocolateyInstall.ps1 中使用,而应始终使用Get-ToolsLocation 助手。

    $toolsDir$env:ChocolateyToolsLocation 是完全不同的东西。由于遗留原因,它们确实具有相似的名称,并且两者都是可以提取档案的位置。

    如果您希望最终用户也能够控制软件存档的提取位置,那么使用子文件夹 undre Get-ToolsLocation 是一个不错的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多