Как поместить символические ссылки на все исполняемые файлы, установленные через Chocolatey, в определенный каталог?

479
sauravsahu

Шоколадный - PowerShell - Симлинк

Я установил несколько пакетов с помощью Chocolatey Package Manager. Вместо того, чтобы добавлять каждый каталог установки в PATH или в мою $PATHпеременную в PowerShell, я хочу создать каталог и разместить символические ссылки на исполняемые файлы для каждого пакета. Я сделал это для следующих пакетов:

  • CCleaner
  • Гугл Хром
  • Fire Fox
  • Все это работало нормально. Недавно я установил VSCode и VLC, и тот же метод не работал. Я использовал эту команду для создания символических ссылок в PowerShell:


    New-Item -ItemType SymbolicLink -Path "vlc.exe" -Value "C:\Program Files\VideoLAN\VLC\vlc.exe"
    VLC (и VSCode) работают нормально при двойном щелчке по символической ссылке. Есть ли лучший способ сделать это (и почему этот метод не работает)?

    2

    1 ответ на вопрос

    6
    ferventcoder

    tl; dr : То, что вы пытаетесь сделать, не так, как вы хотите. К счастью, ShimGenerator может сделать именно это (именно для этого он был разработан и поставляется с Chocolatey): & "$env:ChocolateyInstall\tools\shimgen.exe" --output="$env:ChocolateyInstall\bin\vlc.exe" --path=" C:\Program Files\VideoLAN\VLC\vlc.exe" -iconpath="C:\Program Files\VideoLAN\VLC\vlc.exe"

    Shim created for VLC

    Почему символическая ссылка (символическая ссылка) не будет работать

    Эти исполняемые файлы имеют зависимости, которые они ожидают относительно исполняемого файла. Вам нужно будет создать символическую ссылку на файл И все его зависимые файлы / папки - другими словами, вы не можете просто создать символическую ссылку на файл, вам, вероятно, нужно будет создать символическую ссылку на каталог и поместить этот каталог в PATH, что побеждает цель, которую вы пытаетесь достичь.

    Shimming - лучший путь

    Chocolatey создает прокладки, когда находит исполняемые файлы в каталогах пакетов. Симлинки падают, когда файлы имеют зависимости (как вы видите).

    Мы написали больше об этом на https://chocolatey.org/docs/features-shim#benefits (выделено мной):

    Вот преимущества создания прокладки:

    • Предоставляет исполняемый файл, который вызывает целевой исполняемый файл.
    • Запускает целевой исполняемый файл там, где он находится, что означает, что все используемые зависимости и другие вещи находятся в исходном местоположении
    • Когда элементы требуют повышенных привилегий, прокладки вызовут запросы UAC.
    • Exe-файл может быть вызван из powershell, bash, cmd.exe или других оболочек так же, как вы называете цель.
    • Блокирует и ожидает завершения работы приложений командной строки, немедленно завершается при запуске приложения с графическим интерфейсом.
    • Использует значок цели, если цель существует при создании.
    • Работает лучше, чем символические ссылки. Симлинки на Windows падают при файловых зависимостях. Поэтому, если ваш файл зависит от других файлов и библиотек DLL, все они также должны быть связаны.
    • Не требует специальных привилегий, таких как создание символических ссылок (символических ссылок). Таким образом, вы можете создавать прокладки без административных прав.

    Если бы символические ссылки работали лучше, мы бы, вероятно, использовали их вместо того, чтобы тратить количество времени, которое мы потратили на работу с shimgen. На странице возможностей шимов также есть FAQ .

    Шимминг в шоколадных пакетах

    Chocolatey автоматически создает прокладки, когда исполняемые файлы находятся в каталоге пакета.

    Вы также можете сделать это в chocolateyInstall.ps1скриптах (в упаковке) с Install-BinFile. Подробности смотрите на https://chocolatey.org/docs/helpers-install-bin-file .

    Как вы можете Symlink VLC

    Для полной символической ссылки VLC вам также потребуется символическая ссылка на следующие файлы и папки (и любые подпапки и файлы в этих папках) в дополнение к просто vlc.exe:

    enter image description here

    Хотя я мог бы предоставить сценарий для символической ссылки всей вещи, я не думаю, что это необходимо, поскольку это в значительной степени бесполезный подход.