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

时间:2016-02-29 20:58:29

标签: nuget nuget-package chocolatey oneget

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

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

可执行文件名称相同。

x86\adplus.exe
x64\adplus.exe

安装后看起来像Chocolatey创建的垫片确实成功启动了一个adplus实例。但有时我需要32位版本,有时我需要64位版本。

所以这就是问题:当在不同目录中有两个同名的可执行文件时,如何告诉Chocolately为每个目录中的可执行文件创建不同的填充程序?

1 个答案:

答案 0 :(得分:1)

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

Windows对目录的限制是每个文件/文件夹必须是唯一的名称。这就是你遇到的。 Shims被放入$env:ChocolateyInstall\bin文件夹,这会自动将它们放在PATH上,因为$env:ChocolateyInstall\bin在PATH上(它允许人们安装所有类型的东西而不会重载PATH环境变量)。

您可以创建一个以.ignore(例如x86\adplus.exe.ignore)文件结尾的空文件,旁边是您不希望填充的文件。这在wiki上有记录。您甚至可以在安装期间以OS架构等方式以编程方式执行此操作。

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

由于自动化脚本只是PowerShell,因此您可以在此处获得各种选项。