Есть ли способ перечислить пакеты Chocolatey с их установочной директорией?

56

Команда

choco list -lo

перечисляет установленные пакеты. Но как определить, где устанавливается приложение Chocolatey? До сих пор мне приходилось охотиться за ними.

Некоторые примеры:

  • NUnit идет в Program Files (x86)
  • WGET идет в %ALLUSERSPROFILE%\chocolatey\bin and %ALLUSERSPROFILE%\chocolatey\lib\[Package Name]\tools
  • ConsoleZ пошел в %ALLUSERSPROFILE%\chocolatey\lib\[Package Name]\tools

Есть ли флаг choco list, который скажет мне, куда они пошли? Кажется, ChocolateyGUI тоже этого не делает.

Вроде как в Debian:

dpkg-query

Или RedHat's:

rpm -ql [package-name]

Или ответ YUM:

repoquery --list [package-name]

Доморощенный :

brew list [package-name]
antwarpes
источник

Ответы:

26

В настоящее время нет способа сделать то, что вы просите.

Каждый пакет Chocolatey уникален в том смысле, что он может быть оболочкой MSI или EXE-файла, простым извлечением сжатого архива в известное место, например, C: \ tools, или модулем PowerShell, который извлекает в PSModulePath, или это может быть что-то совершенно нестандартное.

Это побочный эффект экосистемы Windows, где есть несколько способов сделать одно и то же. Шоколад пытается навести порядок в этом, предлагая механизм, по крайней мере, найти все пакеты, которые вы хотите в одном месте, но Шоколад может сделать только так много.

Если вы посмотрите на вещи совершенно по-другому, можно передать аргументы установки в пакет Chocolatey, используя следующее:

https://github.com/chocolatey/chocolatey/wiki/CommandsInstall#installarguments-optional---v09813

Теоретически это может изменить аргументы установки пакета Chocolatey на основе MSI или EXE, чтобы изменить место установки файлов. Вы можете увидеть пример использования этого подхода здесь:

http://chocolatey.org/packages/VisualStudio2013Ultimate

Однако этот подход ограничен. Не каждый, как Мэтт, тратит время на упоминание возможных возможных аргументов установки, и извлечение аргументов установки, которые можно отправить в MSI или EXE-файл, является довольно запутанным процессом.

С точки зрения ChocolateyGUI, и как текущий разработчик этого продукта, я могу сказать вам, что он не делает ничего умного в этой области :-). Это просто оболочка для инструментов командной строки, которые предоставляет Chocolatey, и призвана облегчить ее людям, которым не нравится использование командной строки.

Гэри Юэн Парк
источник
2
Существует решение, поскольку chocolatey генерирует файл shim для пакета, который сохраняет путь к исполняемому файлу и выставляет цель, если --shimgen-noop
вызывается
8
Спустя почти 3 года, это все еще то, что меня больше всего расстраивает в choco: "установил вещь. Сейчас .... где это?"
Бен Коллинз
@BenCollins Полагаю, вы недавно обновили Chocolatey? Теперь он сообщает, где он устанавливает вещи - и это уже почти год (с 0.9.10). github.com/chocolatey/choco/issues/689
ferventcoder
1
"Программное обеспечение установлено в '$ toolsDir'" Спасибо, Шоколад.
Blueben
1
Может быть, сохранить журнал установки в каком-нибудь шоколадном каталоге и дать пользователям возможность получить его по имени пакета ...
Marcello Romani
4

Если Chocolatey создает оболочку для пакета, например, yourprogram.exeвы можете указать путь к исполняемому файлу с помощью следующей строки Powershell:

(yourprogram --shimgen-noop | sls "path to executable:" ) -split "path to executable:" | % {$_.Trim() }

Это работает, только если shim является .exe файлом. Это очень распространено, хотя некоторые пакеты генерируют файлы .ps1, .cmd или даже .bat. В этих редких случаях этот рецепт не будет работать.

maoizm
источник
4

К сожалению, не то, что я знаю. Я считаю, что каталог установки определяется самим пакетом. Он не определен в файле .nuspec, и я нигде не вижу, чтобы он был явно определен в исходном коде Chocolatey.

Исходный код: https://github.com/chocolatey/chocolatey

tbenz9
источник
Это верно. Изучив документы по созданию пакета, вы увидите, что для большинства пакетов установщик MSI, созданный оригинальным создателем программного обеспечения, определяет путь установки. Шоколад не знает, куда MSI помещает файлы.
тяжело
1
cinst notepadplusplus.install -ia "'/D=E:\SomeDirectory\npp'"

Если это был MSI, то обычно вы можете передать -ia:

INSTALLDIR=""E:\SomeDirectory\npp""

 

themoretheless
источник