为什么Chocolatey不将软件包安装到`C:\ Program Files \`?

Pae*_*els 11 directory installation package chocolatey

根据Windows安装规则,程序应安装到 C:\Program Files(64位程序/ x86-64)或C:\Program Files (x86)(32位程序/ x86).程序将复制到包含供应商名称和程序名称的子子文件夹中.

但是为什么Chocolatey没有安装包C:\Program Files\<Vendor>\<Program>\

10.默认情况下,应用必须安装到正确的文件夹.
用户应该对文件的默认安装位置具有一致且安全的体验,同时保持在他们选择的位置安装应用程序的选项.还需要将应用程序数据存储在正确的位置,以允许多个人使用同一台计算机,而不会破坏或覆盖彼此的数据和设置.Windows在文件系统中提供特定位置,以存储特定于用户的程序和软件组件,共享应用程序数据和应用程序数据

10.1默认情况下,您的应用必须安装在Program Files文件夹中
对于%ProgramFiles%中的本机32位和64位应用程序,以及在x64上运行的32位应用程序的%ProgramFiles(x86)%.由于为此文件夹配置了安全权限,因此绝不能将用户数据或应用程序数据存储在此位置.

来源:Windows桌面应用程序的认证要求
版本:10(2015年7月29日)

Git*_*LAB 8

这取决于你的Chocolatey版本,它的设置和包本身.

首先,请参阅工具与应用程序和Chocolatey的区别( 底部是https://github.com/chocolatey/chocolatey/wiki/ChocolateyFAQs).

如果程序包不使用本机安装程序(工具),则取决于程序包作者是否使用了bin_root概念,该概念已启动并将在未来版本中使用.

例如,c:/sysinternals除非您有一个已定义的$env:chocolatey_bin_root变量,否则 SysInternals将立即转到.代码中的概念将发生变化,现在这需要它成为系统驱动器的子文件夹,我不认为我们正在开发具有该限制的最终功能.

如果包尚未具有该概念,则可以始终要求包作者合并它.

如果程序包使用本机安装程序(应用程序),则可以使用 installArgs将参数传递给本机安装程序(https://github.com/chocolatey/chocolatey/wiki/CommandsInstall)并告诉它安装应用程序的目录.这确实需要您知道需要传递给本机安装程序的内容.如果您希望将应用程序放在自定义目录中,则假设您已经是高级用户,因此如果您进行静默安装,则应该知道要通过安装程序的内容.

稍微转述一下:https://groups.google.com/forum/#!msg/chocolatey/uucAz8GxebA/HEPAKp69d90J

也,

注意:截至0.9.8.24,Chocolatey的默认安装位置为 C:\ProgramData\Chocolatey

这减少了本地巧克力安装的攻击面,并限制了谁可以更改目录.

资料来源:https://github.com/chocolatey/chocolatey/wiki/DefaultChocolateyInstallReasoning

根据个人经验,我可以证明这个概念是一个很好的防线(正确配置,使用和理解).

PS:
正如你已经添加到您的答案,技术上的要求%ProgramFiles%%ProgramFiles(x86)%环境变量(s其中适用).
例如,%ProgramFiles(x86)%也可以指向P:\Software\Programs\x86\(而不是C:\Program Files (x86)\).
显然有很多遗留软件(现在(重新)打包)从未使用过<vendor>路径名中的部分.

希望这可以帮助!

  • 我想我发现了自己的错.我认为NuGet/Chocolatey包是*.deb包这样的包,但它只是自动下载和静默安装的包装器.因此,安装目录仍由嵌入或下载的MSI安装程序设置.原因可以使用默认目录或用户定义目录. (3认同)