原生解决方案
Windows 10 Insider Preview Update (14951)提供的官方解决方案基于几乎被遗忘的用于启动二进制文件的binfmt_msc Linux 工具。binfmt_misc的注册命令如下所示( win-executables/init
的临时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替代方案
在您获得最新版本之前,cbwin项目提供了一种解决方法,方法是在 WSL 中安装 3 个新的 linux 命令:
wcmd
:通过cmd.exe
.
wrun
:与 同步调用 win 可执行文件CreateProcess
,然后等待死亡(不使用cmd.exe
)。
wstart
: 启动一个分离的(异步)命令(使用cmd.exe
)。
为了使用它们,您必须:
- 安装cbwin:
- 一个新的
outbash.exe
将安装在您的常规 Windows 文件系统中(在您的%PATH%
.
- WSL 文件系统中的 3 个 linux 命令。
- 使用它
outbash.exe
(无论您安装在哪里)来启动 WSL,而不是C:\Windows\System32\bash.exe
!
- 使用这些命令之一为任何 win 可执行文件添加前缀,例如
wrun notepad
.
提示:如果可执行文件与任何子代一起启动wcmd
或wrun
产生任何子代,则这些子代仅在该可执行文件仍然存在时才存在。
换句话说,尝试开始notepad.exe
是wcmd
行不通的,因为记事本将在启动后立即被杀死——在这种情况下使用wrun
(同步)或wstart
(异步)。