如何在不同目录中填充具有相同名称的可执行文件?

How do I shim executables with the same names in different directories?

我正在为内部团队使用创建一个 Chocolatey 包。 (在这种情况下,该软件包适用于 Microsoft 的 windows 调试器。)

Windows调试器包含两个文件夹,一个用于 32 位 x86 可执行文件,一个 x64 文件夹用于 64 位可执行文件。

可执行文件名称相同。

x86\adplus.exe
x64\adplus.exe

安装后,Chocolatey 创建的 shim 似乎确实成功启动了一个 adplus 实例。但有时我需要32位版本,有时我需要64位版本。

那么问题来了:当不同目录下有两个同名的可执行文件时,如何让Chocolately为每个目录下的可执行文件创建不同的shim?

简短的回答是您不能在 Chocolatey shim 文件夹 ($env:ChocolateyInstall\bin) 中有两个同名的 shim。

目录 Windows 的限制是每个 file/folder 必须是唯一的名称。这就是您 运行 的目标。 Shims 被放入 $env:ChocolateyInstall\bin 文件夹,这会自动将它们放在 PATH 上,因为 $env:ChocolateyInstall\bin 在 PATH 上(它允许人们安装各种东西而无需重载 PATH 环境变量)。

您可以在您不想填充的文件旁边创建一个以 .ignore(例如 x86\adplus.exe.ignore)结尾的空文件。这记录在 wiki 上。您甚至可以在安装过程中基于 OS 架构以编程方式执行此操作。

听起来您在同一台机器上有时需要其中一个,有时需要另一个。我会为这两个文件建议 .ignore 文件,并且可能使用 Get-BinRoot 将文件推送到工具文件夹(您可以定义它的位置)。然后您可以为您需要的任何一个临时设置进程 PATH,它不会持续到实际路径。您甚至可以在路径上设置一个,然后在需要另一个时覆盖它。

由于自动化脚本只是 PowerShell,因此您可以在此处进行各种选择。