随着2016年夏季的Windows 10周年更新 ,有可能在新的Linux子系统(WSL) – 一个“轻量级”虚拟化子系统中运行Ubuntu二进制文件。
不幸的是,启动C:\Windows\System32\bash.exe
,另一个bash
ELF二进制文件在WSL内启动一个进程,从那里你不能逃脱! 您只能启动其他ELF二进制文件。
那么我怎样才能从Windows Bash执行*.exe
文件?[1]
[1]在微软的“官方”GH支持回购中也问到了问题。
Windows 10 Insider Preview Update (14951)提供的官方解决方案基于几乎被遗忘的用于启动二进制文件的binfmt_msc Linux工具。 binfmt_misc的注册命令是这样的(其中/init
是win可执行文件的临时binfmt_misc “解释器”):
sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register
然后win-executable将像常规程序一样启动:
$ 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
不是说任何win可执行文件都必须驻留在Windows( DrvFs )文件系统中,而不是在Linux的文件系统( VolFs )上,以便继承正确的Windows工作目录。
直到你得到最新的版本,项目cbwin提供了一个解决方法,通过在WSL内安装3个新的linux命令:
wcmd
:通过cmd.exe
调用win可执行文件。 wrun
:与CreateProcess
同步调用一个win可执行文件,并等待死(不使用cmd.exe
)。 wstart
:启动一个分离(异步)命令(使用cmd.exe
)。 为了使用它们,您必须:
outbash.exe
将安装在常规的Windows文件系统中(在%PATH%
某处),另外 outbash.exe
(无论你安装它)来启动WSL,而不是C:\Windows\System32\bash.exe
! wrun notepad
。 提示:如果使用wcmd
或wrun
启动的可执行文件产生任何子项,则只有在可执行文件保持活动状态的情况下才能存活。
换句话说,试图用wcmd
启动notepad.exe
将不起作用,因为记事本刚刚启动后将被wrun
– 在这种情况下使用wrun
(同步)或wstart
(异步)。