有没有办法在安装目录中列出 Chocolatey 软件包?

ant*_*pes 77 chocolatey

命令

choco list -lo
Run Code Online (Sandbox Code Playgroud)

列出已安装的软件包。但是如何确定 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
Run Code Online (Sandbox Code Playgroud)

或者 RedHat 的:

rpm -ql [package-name]
Run Code Online (Sandbox Code Playgroud)

或者 YUM 的 repoquery:

repoquery --list [package-name]
Run Code Online (Sandbox Code Playgroud)

家酿

brew list [package-name]
Run Code Online (Sandbox Code Playgroud)

Gar*_*ark 32

目前,没有办法做你所要求的。

每个 Chocolatey 包都是独一无二的,因为它可以是 MSI 或 EXE 的包装器,也可以是将压缩档案简单地提取到已知位置,即 C:\tools,或者它可以是一个 PowerShell 模块提取到 PSModulePath,或者它可以是完全自定义的。

这是 Windows 生态系统的一个副作用,其中有多种方法可以做同样的事情。Chocolatey 试图通过提供一种机制来至少在一个地方找到您想要的所有包,从而为此带来某种秩序,但是 Chocolatey 能做的只有这么多。

如果您以完全不同的方式看待事物,则可以使用以下方法将安装参数传递给 Chocolatey 包:

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

理论上,这可以更改基于 MSI 或 EXE 的 Chocolatey 包的安装参数,以更改文件的安装位置。您可以在此处看到使用此方法的示例:

http://chocolatey.org/packages/VisualStudio2013Ultimate

但是,这种方法是有限的。不是每个人都像 Matt 一样花时间提及可能的安装参数,提取可能发送到 MSI 或 EXE 的安装参数是一个相当复杂的过程。

就 ChocolateyGUI 而言,作为该产品的当前维护者,我可以告诉您它在这方面没有任何聪明之处:-)。它只是 Chocolatey 提供的命令行工具的包装器,旨在让不喜欢使用命令行的人更容易使用。

  • 将近 3 年后,这仍然是我对 choco 感到最沮丧的事情:“安装了一个东西。现在......它在哪里?” (17认同)
  • “软件安装到 '$toolsDir'” 哎呀,感谢 Chocolatey。 (3认同)
  • 有一个解决方案,因为 Chocolatey 为包生成 shim 文件,该文件保留可执行文件的路径并公开目标,如果使用 `--shimgen-noop` 开关调用,请参阅我的答案 (2认同)
  • 也许将安装日志存储在某个巧克力目录中,并让用户能够通过包名称检索它...... (2认同)

小智 8

我发现了一些有用的东西

C:\ProgramData\chocolatey\logs\choco.summary.log
C:\ProgramData\chocolatey\logs\chocolatey.log
Run Code Online (Sandbox Code Playgroud)

当然,这些日志包含大量冗余(对于本例)信息。但至少可以通过观察它们来更好地理解巧克力的真正作用。


小智 8

这可能会丢失一些结果,但帮助我找到了一些包:

(Get-Content C:\ProgramData\chocolatey\logs\choco.summary.log) -match 'Software installed to'
Run Code Online (Sandbox Code Playgroud)


tbe*_*nz9 5

不幸的是,不是我所知道的。我相信安装目录是由包本身决定的。它没有在 .nuspec 文件中定义,我看不到它在 Chocolatey 源代码中明确定义的任何地方。

源代码:https : //github.com/chocolatey/chocolatey


mao*_*izm 5

如果 Chocolatey 为包生成了一个 shim,例如,yourprogram.exe您可以通过以下 Powershell 命令告诉可执行文件的路径:

$a="path to executable:"
(yourprogram --shimgen-noop | Select-String $a) -split $a | ForEach-Object Trim
Run Code Online (Sandbox Code Playgroud)

仅当 shim 是 .exe 文件时才有效。这是很常见的,尽管有些包会生成 .ps1、.cmd 甚至 .bat 文件。在这些罕见的情况下,此配方将不起作用。