GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je exécuter un exécutable Windows à partir de WSL (Ubuntu) Bash

Dans la mise à jour Windows 10 Creators (build 1703, avril 2017), ceci est pris en charge de manière native. Vous pouvez donc maintenant exécuter des binaires Windows à partir de Linux...

notepad.exe ou tout autre .exe (l'extension est nécessaire et elle doit être sur votre chemin, certaines versions plus anciennes ont besoin du chemin complet)

...et vice versa en utilisant l'une des méthodes suivantes :

  • bash.exe -c command_to_run c'est-à-dire :bash.exe -c ls
  • bash -c command_to_run c'est-à-dire :bash -c ls
  • wsl command_to_run c'est-à-dire :wsl "ls"; ou spécifiez la distribution que vous souhaitez utiliser pour l'exécuter en utilisant :
    • ubuntu run ls

Pour plus d'informations, consultez l'article lié ci-dessus.


pourquoi ne pas simplement utiliser

$ powershell.exe Start filename

Start est l'équivalent Windows de xdg-open sur la plupart des Linux ou open sur macOS, ce qui signifie "ouvrir avec l'application de bureau par défaut". J'aime l'alias pour l'ouvrir.


Solution native

La solution officielle fournie avec la mise à jour Windows 10 Insider Preview (14951) est basé sur le binfmt_msc presque oublié Facilité Linux pour lancer des binaires. La commande d'enregistrement pour binfmt_misc serait comme ça (où /init est le binfmt_misc provisoire "interpréteur" pour les win-executables) :

sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register

Et puis win-executable serait lancé comme des programmes normaux :

$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir

Non pas que tout exécutable win doive résider dans les fenêtres (DrvFs ) système de fichiers - pas sur le système de fichiers de Linux (VolFs ) - afin d'hériter d'un Windows approprié répertoire_de_travail.

Le cbwin alternative

Jusqu'à ce que vous obteniez la dernière version, le projet cbwin propose une solution de contournement, en installant 3 nouvelles commandes linux dans WSL :

  • wcmd  :appelle un exécutable win via cmd.exe .
  • wrun :appelle un exécutable win de façon synchrone avec CreateProcess , et attendez de mourir (sans utiliser cmd.exe ).
  • wstart :lancer une commande détachée (asynchrone) (avec l'utilisation de cmd.exe ).

Pour les utiliser, vous devez :

  1. Installer cbwin :
    • un nouveau outbash.exe sera installé dans votre système de fichiers Windows habituel (quelque part dans votre %PATH% ), plus
    • les 3 commandes linux du système de fichiers WSL.
  2. Utilisez ce outbash.exe (où que vous l'ayez installé) pour démarrer WSL, PAS C:\Windows\System32\bash.exe !
  3. Préfixez tous les exécutables win avec l'une de ces commandes, par ex. wrun notepad .

Astuce : Si l'exécutable lancé avec wcmd ou wrun génère des enfants, ceux-ci ne survivent que tant que l'exécutable reste en vie.

En d'autres termes, essayer de démarrer notepad.exe avec wcmd ne fonctionnera pas, car le bloc-notes sera tué juste après avoir été lancé -- Utilisez wrun (synchrone) ou wstart (asynchrone) dans ce cas.


Linux
  1. Comment configurer Bash pour qu'il exécute *.exe avec Mono ?

  2. Comment exécuter des fichiers .exe dans Ubuntu ??

  3. Comment exécuter Ubuntu sous Windows 10 sur VirtualBox ?

  4. Comment puis-je exécuter une application OpenGL installée sur une machine Linux à partir de ma machine Windows ?

  5. (C/C++) Comment générer un fichier exécutable pouvant fonctionner à la fois sous Windows et Linux ?

Comment exécuter Windows 95 sous Linux

Comment exécuter des applications Linux sur Windows 10 et 11 à l'aide de WSL

Comment installer Wine pour exécuter des applications Windows dans Ubuntu

Comment partager un dossier sur Ubuntu pour y accéder depuis Windows 10

Comment exécuter un script bash

Si je peux, comment installer Ubuntu à partir d'Ubuntu ?