Почему Chocolatey не устанавливает пакеты в `C:\Program Files \`?

В соответствии с правилами установки Windows программы должны быть установлены на C:\Program Files (64-разрядная программа /x 86-64) или C:\Program Files (x86) (32-разрядная программа /x 86). Программа копируется в под-папку, содержащую имя поставщика и имя программы.

Но почему Chocolatey не устанавливает пакеты в C:\Program Files\<Vendor>\<Program>\?

10. Приложения должны установить по умолчанию папки по умолчанию
Пользователи должны иметь последовательный и безопасный опыт работы с местом установки файлов по умолчанию, сохраняя при этом возможность установки приложения в выбранном им месте. Также необходимо хранить данные приложения в правильном месте, чтобы позволить нескольким людям использовать один и тот же компьютер без повреждения или перезаписи данных и настроек друг друга. Windows предоставляет определенные места в файловой системе для хранения программ и программных компонентов, данных общих приложений и данных приложения, специфичных для пользователя.

10.1 Ваше приложение должно быть установлено в папке Program Files по умолчанию
Для 32-разрядных и 64-разрядных приложений в% ProgramFiles% и% ProgramFiles (x86)% для 32-разрядных приложений, работающих на x64. Данные пользователя или данные приложения никогда не должны храниться в этом месте из-за разрешений безопасности, настроенных для этой папки.

Источник: Требования к сертификации для настольных приложений Windows
Версия: 10 (29 июля 2015 г.)

Ответ 1

Это зависит от вашей версии Chocolatey, ее настроек и самих пакетов.

Чтобы начать, см. раздел "Инструменты против приложений и отличия Chocolatey" (https://github.com/chocolatey/chocolatey/wiki/ChocolateyFAQs на внизу).

Если пакет не использует собственный установщик (инструмент), это зависит от если автор пакета использовал концепцию bin_root, которая в будущем.

Например, SysInternals перейдет к c:/sysinternals прямо сейчас, если только у вас есть определенная переменная $env:chocolatey_bin_root. Концепция в код изменится, как и сейчас, это требует, чтобы он был вложенной папке системного диска, и я не вижу, чтобы мы разрабатывали окончательный с этим ограничением.

Если пакет еще не имеет этой концепции, всегда можно задать автора пакета, чтобы включить его.

Если пакет использует собственный установщик (приложение), можно использовать 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)% переменная среды (с, где это применимо).
Например, %ProgramFiles(x86)% также может указывать на P:\Software\Programs\x86\ (вместо C:\Program Files (x86)\).
Очевидно, существует много устаревшего программного обеспечения (теперь (повторно) упакованное), которое никогда не использовало раздел <vendor> в имени пути.

Надеюсь, это поможет!