WSL Ubuntu exe

在 WSL 中运行 exe 程序

在 Ubuntu 可以直接执行 Windows 的 exe 程序,比如 explorer.execmd.exewsl.exedocker.exe 等。 但大概率会因为权限问题而失败。如下:

superod@DESKTOP-F6II1F7:~$ cmd.exe
bash: /mnt/c/Windows/system32/cmd.exe: Permission denied

原因在于你没有这个 exe 文件的执行权限:

superod@DESKTOP-F6II1F7:~$ ls -la /mnt/c/Windows/System32/cmd.exe
-r--r--r-- 2 superod superod 289792 Apr 24 02:37 cmd.exe

找到原因,那么解决办法也就显而易见了:把 exe 文件复制一份,并赋予执行权限,操作如下:

### 创建 ~/.local/bin 目录
superod@DESKTOP-F6II1F7:~$ mkdir -p ~/.local/bin

### 复制 exe 到 ~/.local/bin
superod@DESKTOP-F6II1F7:~$ cp /mnt/c/Windows/System32/cmd.exe ~/.local/bin

### 赋予执行权限
superod@DESKTOP-F6II1F7:~$ chmod u+x ~/.local/bin/cmd.exe

### 检查权限
superod@DESKTOP-F6II1F7:~$ ls -lah ~/.local/bin/cmd.exe
-r-xr--r-- 1 superod superod 283K Aug 31 02:49 cmd.exe

执行试试看效果:

superod@DESKTOP-F6II1F7:~$ ~/.local/bin/cmd.exe
系统无法在消息文件中为 Application 找到消息号为 0x400023c8 的消息文本。
系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本。

(c) Microsoft Corporation。保留所有权利。

C:\Windows>

以上可见 cmd.exe 执行成功。

其实可以不需要带完整路径(~/.local/bin/*.exe)来执行 exe,因为 ~/.local/bin 在你的 PATH 中:

superod@DESKTOP-F6II1F7:~$ echo $PATH
*****:/home/superod/.local/bin:*****

如果使用 root 来运行,那么会遇到 command not found 问题。原因是该目录不在你 root 用户的 PATH

如此就可以愉快地在 WSL 中运行 exe 程序了,值得一提比较实用的是 explorer.exe 可以在文件资源管理器中打开指定的文件夹。