原生溶液
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 Executive将像常规程序一样启动:
$ 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工作目录.
The cbwin alternative
在获得最新版本之前,project cbwin提供了一个解决方案,在WSL中安装了3个新的linux命令:
wcmd
:通过cmd.exe
调用win可执行文件.
wrun
:与CreateProcess
同步调用win可执行文件,并等待死亡(不使用cmd.exe
).
wstart
:启动分离(异步)命令(使用cmd.exe
).
要使用它们,您必须:
- 安装cbwin:
- 使用这个
outbash.exe
(无论安装在哪里)来启动WSL,而不是C:\Windows\System32\bash.exe
!
- 在任何win可执行文件前加上这些命令之一,例如
wrun notepad
.
Tip:如果用wcmd
或wrun
启动的可执行文件产生了任何子文件,这些子文件只能在该可执行文件仍然存在的时间内存活.
换句话说,try 以wcmd
开始notepad.exe
是行不通的,因为notepad将在启动后立即被杀死——在本例中使用wrun
(同步)或wstart
(异步).