Как мне подобрать исполняемые файлы с одинаковыми именами в разных каталогах?
Я создаю пакет 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, у вас есть все возможные варианты.