【问题标题】:How do I set Chocolatey to install applications onto another drive?如何设置 Chocolatey 以将应用程序安装到另一个驱动器上?
【发布时间】:2013-11-03 11:41:48
【问题描述】:

我已经安装了 Chocolatey,但我希望它将程序安装到另一个驱动器而不是 C。C 只是一个小型 SSD,但我有其他驱动器,我通常会在其中安装程序。

有什么想法吗?

【问题讨论】:

标签: windows chocolatey


【解决方案1】:

巧克力 FOSS

对于每个应用程序,您需要知道其在安装期间使用的命令行开关以更改其安装目录并使用--installArgs 传递它。请参阅 Install Command (choco install)Overriding default install directory or other advanced install concepts

另一种确保不同驱动器的方法是将您的Program Files 重新定位到不同的驱动器。你可能想查一下;是可以的。

巧克力授权版本

我们添加了无处不在的安装开关!如果您需要覆盖安装目录并且不想完成所有工作来确定该开关是什么,您可以选择使用 Chocolatey 的一个开关 - Ubiquitous Install Directory Option (Licensed Editions Only)

注意:我们需要以某种方式确保 Chocolatey 社区的长寿,那就是拥有 FOSSium(免费增值)模式。专业版每月 8 美元(每年 96 美元),比每月外出就餐花费更少,为您提供一些很棒的功能,并确保社区基础设施继续提供优质服务和改进。当您使用免费服务(社区存储库,又名https://chocolatey.org/packages)时,提供该服务不是免费的。因此,我们选择了某些高级功能加入到这些版本中,以提供物有所值的价值。

【讨论】:

  • 感谢您的信息。我来看看开关。希望无处不在的开关得到实现。
  • 哦,我们计划有一天去那里
  • 不要跳到“我们到了吗?我们到了吗?”潮流,这个功能有ETA吗?我知道这远非简单,但安装目录(IE:D:\ Programs)的全局更改会很不错。那将是在...巧克力...蛋糕上的糖霜...
  • @WernerCD 我们首先要解决一些基本的设计问题。这是在路线图上,这是一个非常需要的功能。我希望它在 v2 中,因为 v1 需要解决所有设计困难并首先解决这些问题。
  • 所以它肯定是依赖于软件的@Tarulia - 你必须已经知道能够传递它的静默安装选项。在许可版本中,Chocolatey 将检测安装程序的类型,然后采取行动 - 默认情况下 MSI 使用“TARGETDIR”,但通常大多数使 MSI 使用“INSTALLDIR”的工具。 Chocolatey 将寻找可能使用的不同选项并最终使用默认值。即使在这一切结束时,Chocolatey 目前仍受制于底层软件安装程序——因此它需要支持更改目录。
【解决方案2】:

我发现了另一个简单的技巧 - 像往常一样安装 choco,安装后立即将 c:\programdata\chocolatey 目录移动到您喜欢的任何位置,然后更新 ChocolateyInstall 环境变量并更新 PATH 环境变量,以便 choco 的 \bin移动后找到子文件夹。

当然,我不知道其他软件包是否可以,但我刚刚安装了 7zip 和 docker-machine 没有问题,所以似乎可以工作。

【讨论】:

  • 不错的解决方法;谢谢。虽然我了解如何实施解决方案,但它是如何工作的?
  • @BaldEagle:当您在任何地方安装任何应用程序时,稍后可能会想知道您是否安装了它以及安装在哪里。如果它是基于 MSI 的安装程序,您可以作为 Windows-Installer 平台,但 Choco 不使用它。 Choco 可以简单地将路径硬编码为“C:\choco”,但我们现在已经有了 201x,而且几乎没有理智的开发人员会这样做。然后,我们遇到了先有鸡还是先有蛋的问题:我们需要将安装位置信息存储在某个地方,以便以后有人可以检查它,但是,这个“某处”必须是普遍可用的,并且将来不会改变。注册表是一种选择...
  • @BaldEagle: ..但它确实变得很杂乱,如果由于某种原因有多个安装可能会有点问题。它不适用于 Linux/etc,因为那里没有注册表。出于这个原因,许多应用程序/平台/实用程序将此类信息存储在几乎所有当代操作系统上都可用的“环境变量”中。 EnvVars 可以在许多层上进行管理 - 系统默认值、用户、进程等 - 并且使用它们来存储简单的字符串(如路径)非常容易。 Java 做到了。 Visual Studio 做到了。所以Choco也这样做了。在控制台中运行set 并查看所有其他内容。
  • @BaldEagle:所以,我们有了神奇的 env-var。每当有人想找到 Choco 时,只要他愿意支持 Choco,他就会查看那个神奇的 env-var。您的操作系统不关心 Choco、Java 或其他任何东西,也不关心它们的自定义环境变量。那是另一个用户应用程序。只有 Choco 的 envvar 无助于查找和运行 choco.exe,您仍然需要编写整个路径,因为操作系统不关心 Choco 的特殊 env 变量。但是,操作系统会查看 PATH。将 Choco 的路径添加到 PATH 允许您只编写 choco。这几乎就是全部了。
【解决方案3】:

您可以将 Chocolatey 目录移动到另一个位置,然后从默认位置创建一个硬符号链接 - 请参阅 The Complete Guide to Creating Symbolic Links (AKA Symlinks) on Windows

mklink /J C:/ProgramData/chocolatey D:/my/new/location

但请务必在执行任何操作之前创建常规备份、还原点等。

【讨论】:

  • 简单。有效的。工作。
  • 如果有帮助,对于 Windows 版本 10.0.17134.112,我必须使用 mklink /J "C:/ProgramData/chocolatey" D:/my/new/location(注意添加的引号)。我的第二个目录无论如何都需要它们,所以我不知道它是否总是希望它们在那里。希望它可以帮助某人。
  • 在 Powershell 中需要引号,如 @BaldEagle 解决方案。在 CMD 中,引号不是必需的。
【解决方案4】:

总结和更正的解决方案(包括便利脚本)

对于免费版本,您必须将目录作为附加i输入a参数:

choco install theapp -y --ia "folder switch"


挑战在于开关因安装程序而异。

继续确定安装程序

  1. 转到chocolatey package repo 并搜索您的应用
  2. 向下滚动到“列出文件”并打开tools\chocolateyInstall.ps1。如果没有此类文件,请返回搜索并使用“.installer”版本。
  3. 搜索fileType = exe。我测试的大多数应用程序都有这个扩展。如果是这种情况,请搜索 silentArgs。如果有:
  • /S:使用--ia "/D=C:\new\path。注意:单反斜杠,双反斜杠对我不起作用。在 = 符号之前也有 no 反斜杠,正如其他 cmets 中所建议的那样。
  • /VERYSILENT:使用--ia /DIR=C:\new\path。 verysilent 开关属于 InnoSetup 安装程序。
  • something else:在google上搜索“应用静默安装”,确定路径开关并相应输入:--ia "..."
  1. fileType = msi:使用--ia INSTALLDIR="C:\new\path"(我没有测试这个)

后备解决方案

进行非静默安装并在ui中指定路径:choco install theapp --notsilent

便捷脚本

我创建了一个 Powershell 脚本,它允许安装带有自定义参数的常用应用程序(vlc、VS Code、python、git、Chrome...),包括。文件夹:

https://github.com/vii33/ChocoVanillaPackage


对其他 cmets 的评论

(由于我的分数,我无法直接发表评论,抱歉)

  • @geisterfurz007 感谢您的手册。
  • @quetzalcoatl 这对我不起作用,因为应用程序未安装在巧克力文件夹中。您的解决方案移动了巧克力二进制文件,软件包安装仍然在默认文件夹中完成。

【讨论】:

  • 我正在将您的出色答案与link 应用程序和工具混合使用,以获得两全其美的效果。谢谢!
  • 关于你说你没有测试的微星开关,它可以工作。我用 Putty 包测试了它,它可以工作。谢谢。
【解决方案5】:

对于 MSI 包(在 Windows 中最常见),请使用:

choco install package-name  --% -ia INSTALLDIR="c:\intall\path"

要查看包是否是 MSI 包,请在 Chocolatey 包页面的 Files 下查找 chocolateyInstall.ps1,然后查找:

fileType = 'msi'

已使用Strawberry Perl 进行了测试。

当然,您始终可以使用付费巧克力并受益于无处不在的安装开关

【讨论】:

  • 您能否详细说明--% 开关的作用?我似乎无法找到这方面的文档。
  • @Tarulia 来自 Choco 帮助“在 PowerShell.exe 中,如果您使用的是 v3+ 版本,您可以在 -ia 之前尝试 --% 以按原样传递 args,这意味着它不应该需要任何特殊的解决方法。”
  • 此解决方案似乎不起作用。安装脚本没有变化。软件包安装在C: 驱动器的默认目录中。巧克力0.10.15
  • 另外,目前--ia 选项用两个破折号记录
【解决方案6】:

看起来 Chocolatey 现在已经创建了一个无处不在的开关:

Ubiquitous Install Directory Option (Licensed Editions Only)

我没有机会亲自使用它,但看起来这样可以解决问题。如果每个应用程序有一点手册。

【讨论】:

  • 嗯。 安装目录覆盖(仅限许可版本)。因此,要覆盖目录,您需要支付 $8/月
  • 我们需要以某种方式确保 Chocolatey 社区的长寿,那就是拥有 FOSSium(免费增值)模式。每月 8 美元可以为您提供一些很棒的功能,并确保社区基础设施继续存在和改进。当您使用免费服务时,提供该服务不是免费的。
【解决方案7】:

添加到@antonio's answer 我想将我的发现放在设置安装目录的其他案例上。

对于fileType = 'exe',似乎有两种类型的安装程序,您可以用给定的silentArgs(也在chocolateyInstall.ps1)区分它们。

到目前为止,我发现/S 是silentArgs 和一些以/VERYSILENT /NORESTART 开头的更长的东西(这似乎是一个InnoSetup 安装程序)。

  • /S:经过测试,我发现它可以正常工作(以 7zip 为例):
    choco install 7zip.install -y --ia "/D\=D:\Destination\"(注意:这也会触发调试输出。如果您有没有解决方案,请告诉我!)李>
  • /VERYSILENT /NORESTART ...:根据InnoSetup Installer CLI docs,开关应该是/DIR=<path>,它似乎是这样工作的:choco install pdftk --ia="/DIR=D:\\Tool\\PDFTk"

许多安装程序也不使用上述任何一种。例如,VirtualBox 需要某些安装参数,jdk8 包有参数来设置目录等。如果您无法将silentArgsfileType 与上述匹配,您将不得不做一些研究。
对于 VirtualBox,我使用 /? 运行安装程序,并弹出一个解释可以添加的参数的弹出窗口。
对于 Mozilla Firefox,我发现了一个社区帖子,其中解释了安装程序允许使用哪些标志和开关。不幸的是,每次更新都必须重新提供 ini 文件,这有点乏味。

现在,如果您主要使用 Chocolatey 轻松地自动更新您的应用程序并安装它们,而无需手动查找下载链接以及将 .msi、.exe 和 .zip 文件弄乱您的下载文件夹,您只需添加 Chocolatey 标志 --notsilent (或--not-silent)让安装程序正常运行,并提供您通常可以提供给 UI 的所有选项。在大多数情况下,它们也用于更新。

【讨论】:

    【解决方案8】:

    使用ChocolateyToolsLocation 环境变量。 程序本身保持在应有的位置,但所有使用 choco 的安装都安装在 D:\tools

    或另一个环境变量: ChocolateyInstall:D:\ProgramData\chocolatey

    来源:

    【讨论】:

    • 这个必须是公认的答案。
    • 有可能覆盖 --installargs:stackoverflow.com/questions/38846874/…
    • True @cleverpig,这也是目前公认的答案。但是您需要将该参数传递给每个安装。这两个环境解决了这个问题。
    【解决方案9】:

    accepted answer 已经暗示了这个选项,所以我只是为了完整起见而发帖:

    使用 regedit 更改默认 Program Files 目录

    尽管近年来 SSD 变得更大更便宜,但仍有一些小众用例,您希望将 Windows 安装在单独的较小分区上,并将软件安装在不同的较大分区上。

    1. win + R 并输入regedit
    2. 找到这个键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    3. ProgramFilesDirProgramFilesDir (x64)C:\ProgramFiles 更改为[your drive]:\Program Files

    引用我的消息来源:this answer but longer

    重要提示

    一般来说,Chocolatey 会尊重这一点 - 但需要提及该方法的一些注意事项:

    • 一些程序/安装程序不尊重ProgramFilesDir 注册表项。 例如,Audacity 仍然安装到 C:(尽管 - 在我的情况下,至少 - ProgramFilesDirF:\Program Files,但是Chocolatey 在创建快捷方式和开始菜单条目时假设它已安装到 F:)。
    • 这个breaks NVIDIA GeForce Experience可能还有其他副作用,但我还没发现。
    • 您需要更改ProgramFilesDir 注册表项安装任何带有巧克力的东西,否则某些脚本、包或程序可能会损坏(例如,我必须重新安装chocolateygui 包)

    旁注:此答案的运行假设“我如何设置巧克力以将应用程序安装到另一个驱动器”意味着“我如何设置巧克力以将应用程序安装到我安装了大多数其他软件的同一驱动器。 "

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多