Comment un exécutable Windows peut-il être exécuté à partir de Wsl (Ubuntu) Bash

avec Windows 10 Mise à jour anniversaire pour l'été 2016, est venu la possibilité d'exécuter ubuntu binaires à l'intérieur de la nouvelle Windows Subsystem for Linux (WSL) , un" léger " sous-système virtualisé.

malheureusement, le lancement C:\Windows\System32\bash.exe , un autre bash binaire ELF démarre un processus à l'intérieur du WSL, d'où vous ne pouvez pas vous échapper! Vous ne pouvez lancer que d'autres binaires ELF.

alors comment puis-je exécuter des fichiers *.exe à partir de Windows Bash?[1]

[1] Question posée également dans " officiel "de Microsoft GH support repo .

16
demandé sur ankostis 2016-08-12 17:44:08
la source

2 ответов

Native solution

la solution officielle fournie avec Windows 10 Insider Preview Update (14951) est basée sur le presque oublié binfmt_msc facilité Linux pour le lancement des binaires. La commande d'enregistrement pour le binfmt_misc serait comme ceci (où /init est le provisoire binfmt_misc "interprète" pour la victoire-exécutables):

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

et puis win-executable serait lancé comme les programmes réguliers:

$ 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 win-exécutable doit résider dans le système de fichiers de windows ( DrvFs )-pas sur le système de fichiers de Linux ( VolFs ) - afin d'hériter d'un Windows working-directory.

the cbwin alternative

Jusqu'à ce que vous obtenez la dernière construction, le projet cbwin offre une solution de contournement, en installant 3 nouvelles commandes linux à L'intérieur de WSL:

  • wcmd : appelez un exécutable gagnant par cmd.exe .
  • wrun : appelez un win-executable de manière synchrone avec CreateProcess , et attendez de mourir (n'utilisez pas 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 régulier (quelque part dans votre %PATH% ), plus
    • les 3 commandes linux dans le 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éfixe tous les exécutables win avec l'une de ces commandes, p.ex. wrun notepad .

Conseil: si l'exécutable lancé avec wcmd ou wrun produit des enfants, ceux-ci ne survivent que tant que l'exécutable reste vivant.

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

19
répondu ankostis 2017-11-02 18:02:59
la source

dans la mise à jour des créateurs Windows 10 (build 1703, avril 2017), Ceci est nativement pris en charge. Vous pouvez donc maintenant exécuter des binaires Windows à partir de Linux...

linux to windows

...et vice versa:

windows to linux

pour plus d'informations, voir l'article lié ci-dessus.

6
répondu Andrew Mao 2017-12-06 00:53:32
la source