答案1
WSL2 如何运行 Windows 可执行文件?
Windows 可执行文件(PE 二进制文件)被添加为binfmt_miscWSL2 中的条目。简而言之,binfmt_misc是 Linux 内核的一项功能,它允许识别任意可执行文件格式并将其传递给某些程序。
在 WSL2 中,init
二进制文件(每个进程都从中分叉)将 Windows PE 二进制文件注册为可执行文件,并使其自身可执行(即init
)。这是 PE binfmt 条目的输出:
cat /proc/sys/fs/binfmt_misc/WSLInterop
enabled
interpreter /tools/init
flags: F
offset 0
magic 4d5a
WSLInterop
只是条目的名称。魔数4d5a
是Windows PE 可执行文件的前两个字节。假设这是(解释器)识别 PE 二进制文件MZ
的指纹。init
用户可以使用此命令暂时(直到 WSL 重新启动)禁用注册表:
echo 0 | sudo tee /proc/sys/fs/binfmt_misc/WSLInterop
进一步阅读:
答案2
它将运行环境变量中的任何可执行文件(Windows 或 Linux)$PATH
。它会按顺序搜索目录,因此,如果您想按偏好运行 Linux 版本,请确保这些目录是前路径中的 Windows 目录
答案3
bash 作为 pico 进程运行。当您尝试运行程序时,linux 子系统驱动程序会识别运行进程的请求并调用ZwCreateUserProcess
windows 内核,从而创建 windows 进程。
它可以调用该函数,因为 pico 进程进行的所有系统调用都被转换为内核模式下的 NT 调用,无论是通过LXCORE.SYS
还是内核ntoskrnl.exe
。
答案4
创建一个别名您希望优先于 Windows 同名应用程序的 Linux 应用程序。例如:
别名 foo='/path/to/bar'