在 WSL 中运行 exe 程序
在 Ubuntu 可以直接执行 Windows 的 exe 程序,比如 explorer.exe
、cmd.exe
、wsl.exe
、docker.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
可以在文件资源管理器中打开指定的文件夹。