Questão Como colocar links simbólicos para todos os executáveis ​​instalados através do Chocolatey em um diretório específico?


Chocolatey - PowerShell - Symlink

Eu instalei alguns pacotes usando o Gerenciador de Pacotes do Chocolatey. Em vez de adicionar cada diretório de instalação ao PATH ou no meu $PATH variável no PowerShell, desejo criar um diretório e colocar links simbólicos para executáveis ​​para cada pacote. Eu fiz isso para os seguintes pacotes:

  • CCleaner
  • Google Chrome
  • Raposa de fogo
  • Tudo isso funcionou bem. Recentemente instalei o VSCode e o VLC e o mesmo método não funcionou. Eu usei este comando para criar os links simbólicos no PowerShell:


    New-Item -ItemType SymbolicLink -Path "vlc.exe" -Value "C:\Program Files\VideoLAN\VLC\vlc.exe"
    VLC (e VSCode) ambos funcionam bem quando são clicados duas vezes no symlink. Existe uma maneira melhor de fazer isso (e por que esse método não está funcionando)?


    2


    origem




    Respostas:


    tl; dr: O que você está tentando fazer não é possível da maneira que você quer fazer. Felizmente, ShimGenerator pode fazer isso exatamente (é para isso que foi projetado e vem com o 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

    Por que um link simbólico (Symlink) não funciona

    Esses executáveis ​​têm dependências que eles esperam ser relativos ao executável. Você precisaria ligar simbolicamente o arquivo E todos os seus arquivos / pastas dependentes - então, em outras palavras, você não pode simplesmente ligar simbolicamente o arquivo, você provavelmente precisará criar um link simbólico para o diretório e colocar esse diretório no PATH, que meio que anula o propósito que você está tentando alcançar.

    Shimming é uma maneira melhor

    Chocolatey cria calços quando encontra executáveis ​​em diretórios de pacotes. Os links simbólicos caem quando os arquivos têm dependências (como você está vendo).

    Nós escrevemos mais sobre isso em https://chocolatey.org/docs/features-shim#benefits (ênfase minha):

    Estes são os benefícios de criar um shim:

    • Fornece um arquivo exe que chama um executável de destino.
    • Executa o executável de destino onde ele está, o que significa que todas as dependências e outras coisas usadas estão todas no local original
    • Quando os itens exigem privilégios elevados, os calços geram solicitações do UAC.
    • O exe pode ser chamado de powershell, bash, cmd.exe ou outros shells como você chamaria o alvo.
    • Bloqueia e espera que os aplicativos da linha de comando terminem a execução, sai imediatamente ao executar um aplicativo GUI.
    • Usa o ícone do destino se o destino existir na criação.
    • Funciona melhor que links simbólicos. Os links simbólicos no Windows estão sujeitos a dependências de arquivos. Então, se o seu arquivo depende de outros arquivos e DLLs, todos   esses também precisam estar ligados. 
    • Não requer privilégios especiais, como criar links simbólicos (symlinks). Assim, você pode criar shims sem direitos administrativos.

    Se os links simbólicos funcionassem melhor, provavelmente os teríamos usado em vez de gastar a quantidade de tempo que fizemos trabalhando no shimgen. Há um FAQ na página do recurso shim também.

    Shimming em pacotes Chocolatey

    Chocolatey cria automaticamente calços quando executáveis ​​são encontrados no diretório do pacote.

    Você também pode fazer isso chocolateyInstall.ps1 scripts (na embalagem) com Install-BinFile. Veja mais detalhes em https://chocolatey.org/docs/helpers-install-bin-file.

    Como você pode Symlink VLC

    Para criar um link completo para o VLC, você também precisa criar uma ligação simbólica para os seguintes arquivos e pastas (e todas as subpastas e arquivos dessas pastas), além de apenas vlc.exe:

    enter image description here

    Embora eu possa fornecer um script para criar uma ligação simbólica sobre a coisa toda, não acho que seja necessário, pois é uma abordagem fútil.


    6