Wie platziere ich Symlinks zu allen durch Chocolatey installierten ausführbaren Dateien in einem bestimmten Verzeichnis?

546
sauravsahu

Schokolade - PowerShell - Symlink

Ich habe ein paar Pakete mit Chocolatey Package Manager installiert. Anstatt jedes Installationsverzeichnis zu PATH oder meiner $PATHVariablen in PowerShell hinzuzufügen, möchte ich ein Verzeichnis erstellen und Symlinks zu ausführbaren Dateien für jedes Paket setzen. Ich habe dies für die folgenden Pakete gemacht:

  • CCleaner
  • Google Chrome
  • Feuerfuchs
  • Alle haben gut funktioniert. Vor kurzem habe ich VSCode und VLC installiert und die gleiche Methode funktionierte nicht. Ich habe diesen Befehl verwendet, um die Symlinks in PowerShell zu erstellen:


    New-Item -ItemType SymbolicLink -Path "vlc.exe" -Value "C:\Program Files\VideoLAN\VLC\vlc.exe"
    VLC (und VSCode) laufen beide einwandfrei, wenn Sie auf den Symlink doppelklicken. Gibt es einen besseren Weg, dies zu tun (und warum funktioniert diese Methode nicht)?

    2

    1 Antwort auf die Frage

    6
    ferventcoder

    tl; dr : Was Sie zu tun versuchen, ist nicht in der gewünschten Weise möglich. Glücklicherweise kann ShimGenerator genau das tun (dafür wurde es entwickelt und es wird mit Chocolatey geliefert ): & "$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 für VLC erstellt

    Warum funktioniert ein symbolischer Link (Symlink) nicht?

    Diese ausführbaren Dateien haben Abhängigkeiten, von denen sie erwarten, dass sie relativ zur ausführbaren Datei sind. Sie müssten die Datei UND alle ihre abhängigen Dateien / Ordner mit einem Symlink verknüpfen. Mit anderen Worten, Sie können die Datei nicht einfach mit einem Symlink verknüpfen. Möglicherweise müssen Sie das Verzeichnis mit dem Symlink verknüpfen und dieses Verzeichnis auf den PATH setzen, was die Art der Datei beeinträchtigt Zweck, den Sie zu erreichen versuchen.

    Shimming ist ein besserer Weg

    Chocolatey erstellt Shims, wenn es ausführbare Dateien in Paketverzeichnissen findet. Symlinks fallen herunter, wenn die Dateien Abhängigkeiten haben (wie Sie sehen).

    Wir haben mehr darüber unter https://chocolatey.org/docs/features-shim#benefits (Hervorhebung meines) geschrieben:

    Dies sind die Vorteile der Erstellung einer Unterlage:

    • Stellt eine Exe-Datei bereit, die eine ausführbare Zieldatei aufruft.
    • Führt die Ziel-Programmdatei an dem Ort aus, an dem sie sich befindet, dh alle Abhängigkeiten und sonstigen verwendeten Elemente befinden sich alle am ursprünglichen Speicherort
    • Wenn für Elemente erhöhte Berechtigungen erforderlich sind, werden durch Shims UAC-Eingabeaufforderungen angezeigt.
    • Das Exe kann von Powershell, Bash, cmd.exe oder anderen Shells aufgerufen werden, genau wie Sie das Ziel nennen würden.
    • Blockiert und wartet, bis die Ausführung der Befehlszeilen-Apps abgeschlossen ist. Wird beim Ausführen einer GUI-App sofort beendet.
    • Verwendet das Symbol des Ziels, wenn das Ziel bei der Erstellung vorhanden ist.
    • Funktioniert besser als Symlinks. Symlinks unter Windows fallen bei Dateiabhängigkeiten aus. Wenn Ihre Datei also von anderen Dateien und DLLs abhängig ist, müssen alle diese Dateien auch verlinkt werden.
    • Erfordert keine besonderen Privilegien wie das Erstellen von Symlinks (symbolischen Links). So können Sie Shims ohne Administratorrechte erstellen.

    Wenn Symlinks besser funktionierten, hätten wir sie wahrscheinlich verwendet, anstatt die Zeit zu verwenden, die wir an Shimgen gearbeitet haben. Es gibt auch eine FAQ auf der Shim-Feature-Seite .

    Shining in schokoladigen Packungen

    Chocolatey erstellt automatisch Shims, wenn sich ausführbare Dateien im Paketverzeichnis befinden.

    Sie können dies auch in chocolateyInstall.ps1Skripten (in der Verpackung) mit tun Install-BinFile. Weitere Informationen finden Sie unter https://chocolatey.org/docs/helpers-install-bin-file .

    Wie können Sie VLC verknüpfen?

    Um VLC vollständig zu verknüpfen, müssen Sie zusätzlich zu den folgenden Dateien und Ordnern (sowie den Unterordnern und Dateien in diesen Ordnern) auch einen Symlink erstellen vlc.exe:

    Ich könnte zwar ein Skript bereitstellen, um die gesamte Sache symbolisch zu verknüpfen, aber ich denke nicht, dass es notwendig ist, da es ziemlich sinnlos ist.