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

时间:2015-09-15 20:15:04

标签: installation directory 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)%。由于为此文件夹配置了安全权限,用户数据或应用数据绝不能存储在此位置。

来源:Certification requirements for Windows desktop apps
版本:10(2015年7月29日)

1 个答案:

答案 0 :(得分:8)

这取决于您的Chocolatey版本,它的设置以及包本身

  

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

     

如果软件包不使用本机安装程序(工具),则取决于   如果包作者使用了up_root概念,那就是   进入未来版本。

     

例如,SysInternals将立即转到<body> <div id="main"> </div> </body>,除非   你有一个定义的c:/sysinternals变量。这个概念   代码将改变以及现在这需要它是一个   系统驱动的子文件夹,我不认为我们正在开发最终版本   具有该限制的特征。

     

如果包裹还没有这个概念,那么人们可以随时询问   包装作者将其合并。

     

如果软件包使用本机安装程序(应用程序),则可以使用   $env:chocolatey_bin_root将参数传递给本机安装程序   (https://github.com/chocolatey/chocolatey/wiki/CommandsInstall)和   告诉它安装应用程序的目录。这确实需要   你知道你需要传递给本机安装程序。如果你想   您的应用程序在自定义目录中,有一个假设   你已经是一名高级用户,所以你应该知道   如果您正在进行静默安装,请通过安装程序。

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

另外,

  

注意:自0.9.8.24起,Chocolatey的默认安装位置为   installArgs

     

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

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

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

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

希望这有帮助!