Как мне подобрать исполняемые файлы с одинаковыми именами в разных каталогах?

Я создаю пакет Chocolatey для внутреннего использования командой. (В этом случае пакет предназначен для отладчиков Windows от Microsoft.)

Отладчики Windows содержат две папки: одну для 32-разрядных исполняемых файлов x86 и папку x64 для 64-разрядных исполняемых файлов.

Имена исполняемых файлов идентичны.

x86\adplus.exe
x64\adplus.exe

Похоже, что после установки созданная Chocolatey прокладка действительно успешно запускает один из экземпляров adplus. Но иногда мне нужна 32-битная версия, а иногда мне нужна 64-битная версия.

Итак, вот вопрос: когда в разных каталогах есть два исполняемых файла с одинаковыми именами, как я могу сказать Chocolately, чтобы они создавали разные прокладки для исполняемых файлов в каждом каталоге?

1 ответ

Решение

Короткий ответ: у вас не может быть двух одинаково названных прокладок в папке Chocolatey ($env:ChocolateyInstall\bin).

Ограничением Windows для каталога является то, что каждый файл / папка должен иметь уникальное имя. Это то, с чем вы сталкиваетесь. Прокладки попадают в $env:ChocolateyInstall\bin папка, которая помещает их в PATH автоматически, потому что $env:ChocolateyInstall\bin находится на PATH (это позволяет людям устанавливать все виды вещей без перегрузки переменных среды PATH).

Вы можете создать пустой файл, оканчивающийся на .ignore (например x86\adplus.exe.ignore) файл рядом с тем, который вы не хотите, чтобы шиммы. Это задокументировано в вики. Вы можете даже сделать это программно во время установки на основе чего-то вроде архитектуры ОС.

Звучит так, будто вам иногда нужен один из них, а другой - в то же время. Я бы предложил .ignore файлы для обоих файлов, и, вероятно, с помощью Get-BinRoot отправить файлы в папку инструментов (вы должны определить, где это находится). Затем вы можете временно установить PATH для того процесса, который вам нужен, и он не будет сохранен в фактическом пути. Вы даже можете установить один путь и затем переопределить его, когда захотите другой.

Поскольку сценарии автоматизации - это просто PowerShell, у вас есть все возможные варианты.

Другие вопросы по тегам