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

18716
antwarpes

Команда

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] 
52

4 ответа на вопрос

26
Gary Ewan Park

Currently, there is no way to do what you are asking.

Each Chocolatey package is unique in the sense that it could be a wrapper around an MSI or an EXE, or it could be a simple extraction of a compressed archive to a known location i.e. C:\tools, or it could be a PowerShell module that extracts to PSModulePath, or it could be something completely custom.

This is a side effect of the Windows ecosystem, where there are multiple ways to do the same thing. Chocolatey is trying to bring some sort of order to this by providing a mechanism to at least find all the packages that you want in one place, but there is only so much Chocolatey can do.

If you look at things completely differently, it is possible to pass installation arguments to a Chocolatey package using the following:

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

This could, in theory, alter the installation arguments of an MSI or EXE based Chocolatey package to change where the files are installed to. You can see an example of this approach being used here:

http://chocolatey.org/packages/VisualStudio2013Ultimate

However, this approach is limited. Not everyone takes the time like Matt to mention the possible installation arguments that are possible, and it is quite a convoluted process to extract the installation arguments that are possible to be sent into an MSI or EXE.

In terms of ChocolateyGUI, and as the current maintainer of that product, I can tell you that it does nothing clever in this area :-). It is simply a wrapper around the command line tools that Chocolatey provides, and aims to make it easier for people who don't like using the command line.

Есть решение, так как chocolatey генерирует файл shim для пакета, который сохраняет путь к исполняемому файлу и выставляет цель, если вызывается с ключом `--shimgen-noop`, см. Мой ответ maoizm 7 лет назад 2
Спустя почти 3 года это все еще вызывает у меня наибольшее разочарование в шоколаде: «установил вещь. Сейчас .... где она?» Ben Collins 6 лет назад 4
@BenCollins Полагаю, вы недавно обновили Chocolatey? Теперь он сообщает, где он устанавливает вещи - и это уже почти год (с 0.9.10). https://github.com/chocolatey/choco/issues/689 ferventcoder 6 лет назад 0
@ferventcoder когда / где Chocolatey сообщает, где он устанавливает вещи? Я просто установил Chocolatey v0.10.8, а затем установил программу, и я не мог видеть, где он сообщил, где он установил Matthew 6 лет назад 0
@ Матфея в журнале в конце каждого пакета установки. Что-то вроде «Программное обеспечение установлено на ____». обычно это то, что вы увидите в журнале. Обычно это происходит сразу после «Установка ___ прошла успешно». ferventcoder 6 лет назад 0
"Программное обеспечение установлено в '$ toolsDir'" Спасибо, Шоколад. blueben 5 лет назад 0
@blueben, какой пакет показывает вам этот вывод? А какая версия шоколада? Gary Ewan Park 5 лет назад 0
Может быть, сохранить журнал установки в каком-нибудь шоколадном каталоге и дать пользователям возможность получить его по имени пакета ... Marcello Romani 5 лет назад 0
4
tbenz9

Unfortunately, not that I know of. I believe the install directory is determined by the package itself. It's not defined in the .nuspec file, and I can't see anywhere that it's explicitly defined in the Chocolatey source code.

Source code: https://github.com/chocolatey/chocolatey

Это правильно. Посмотрев [документы по созданию пакета] (https://github.com/chocolatey/chocolatey/wiki/CreatePackages#installation-paths), вы увидите, что для большинства пакетов установщик MSI, созданный исходным создателем программного обеспечения, определяет путь установки. Шоколад не знает, куда MSI помещает файлы. heavyd 9 лет назад 0
4
maoizm

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

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

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

1
themoretheless
cinst notepadplusplus.install -ia "'/D=E:\SomeDirectory\npp'" 

If it was an MSI, then usually you could pass -ia:

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

 

Похожие вопросы