Ist es möglich, Windows-Anwendungen innerhalb eines Windows-Subsystems für ein Linux-Terminal zu öffnen?

Ist es möglich, Windows-Anwendungen innerhalb eines Windows-Subsystems für ein Linux-Terminal zu öffnen?

Ich habe vor Kurzem eine Ubuntu-Installation von Linux für Windows heruntergeladen, da ich lernen wollte, wie man eine Bash-Shell verwendet. Bisher hat es mir Spaß gemacht, aber ich frage mich, ob es eine Möglichkeit gibt, das oben Genannte zu tun. Angenommen, ich habe iTunes auf meinem Computer installiert und möchte es von meinem Linux-Terminal aus öffnen. Ist das möglich? Ich habe versucht, zum Desktop-Ordner im Terminal zu gehen und die .lnk-Dateien zu öffnen, aber es wird mir nur die Meldung „Binärdatei kann nicht ausgeführt werden: Exec-Formatfehler“ angezeigt. Weiß jemand, ob das möglich ist?

Antwort1

Ja, WSL unterstützt das Starten von Windows-Anwendungenausführbare Dateien(wie iTunes) aus der Shell heraus. Wie in den Kommentaren erwähnt, lnkwerden Dateien jedochnichtunterstützt, da sie nichtausführbare Dateien. Sie sindLinkszu ausführbaren Dateien.

WSL ist außerdem so praktisch, Ihren Windows-Pfad (standardmäßig) an Ihren Linux-Pfad anzuhängen. Anwendungen, die sich im Pfad befinden (z. B. notepad.exe), können Sie also einfach direkt mit dem appname.exeFormat starten.

Für Apps, die sich nicht im Pfad befinden (z. B. itunes.exe), müssen Sie den Speicherort der tatsächlichen .exe(ausführbaren Datei) ermitteln und diese mit dem vollständigen Pfad starten. Dies ist eigentlich dasselbe wie für jede ausführbare Linux-Datei unter Linux oder jede ausführbare Windows-Datei unter Windows PowerShell oder CMD.

Um den vollständigen Pfad zu iTunes zu finden, klicken Sie einfach mit der rechten Maustaste auf die lnkDatei im Explorer und wählen Sie"Eigenschaften". Der"Ziel"Das Feld enthält etwa Folgendes C:\Program Files\iTunes\iTunes.exe:

bashWie bereits erwähnt, benötigen Sie, wenn Sie dies in Windows PowerShell oder dem CMD-Interpreter (den Windows-„Äquivalenten“ unter Linux) starten möchten , immer noch den vollständigen Pfad. Sie führen also Folgendes aus:

C:\Program Files\iTunes\iTunes.exe

Um diesen bestimmten Pfad in bashWSL zu starten, verwenden Sie:

/mnt/c/Program\ Files/iTunes/iTunes.exe

Wenn Sie Hilfe beim Konvertieren des Windows-Pfads in den Linux-Pfad benötigen, gibt es dafür einen Befehl:

wslpath 'C:\Program Files\iTunes\iTunes.exe'

Ausführliche Informationen zur Windows/WSL-Interoperabilität finden Sie unterdieses Dokument.

Antwort2

WSL kann Windows-Binärdateien nativ über einige startenInteropund die Verwendung vonbinfmt_misc

LNKAndererseits handelt es sich nicht um eine ausführbare Datei, sondern um eine Art Datei, die Metadaten für die Windows Shell speichert, um auf alle Arten von Dateien zu verweisen, nicht nur auf ausführbare Dateien. Da es sich um eine normale Datei handelt, müssen Sie sie mit einigen Anwendungen öffnen. In cmd können Sie Dateien mit dem standardmäßig zugeordneten Programm öffnen, indem Siestart. In älteren WSLs können Sie Folgendes tun:

cmd.exe /c start ~/Desktop/iTunes.lnk

Offensichtlich %Windir%\System32muss es in Ihrem Pfad sein (was standardmäßig der Fall ist), oder Sie müssen Ihre WSL-Umgebung reparieren. Das Äquivalent in PowerShell istStart-ProcessoderInvoke-Item

powershell.exe -Command Start-Process ~/Desktop/iTunes.lnk
powershell.exe -Command Invoke-Item ~/Desktop/iTunes.lnk

Für die meisten Dateitypen können Sie auch explorer.exedirekt

explorer.exe ~/Desktop/iTunes.lnk

In WSL2 gibt es hierfür jedoch einen neuen Befehl

wslview ~/Desktop/iTunes.lnk

Einige andere Lösungen beginnenwsl-offenUndeöffnen

Sehen


Beispielsweise öffnet einer der folgenden Befehle das aktuelle Verzeichnis im Explorer

explorer.exe .
wslview .
powershell.exe -Command Start-Process .
powershell.exe -C Invoke-Item .
cmd /c start .

oder um einige PDF-Dateien zu öffnen

explorer.exe my.pdf
wslview my.pdf
powershell.exe -Command Start-Process my.pdf
powershell.exe -C Invoke-Item my.pdf
cmd /c start my.pdf

verwandte Informationen