是否可以从 Linux 终端的 Windows 子系统内部打开 Windows 应用程序?

是否可以从 Linux 终端的 Windows 子系统内部打开 Windows 应用程序?

因此,最近我下载了适用于 Windows 的 Ubuntu Linux 安装,因为我想学习如何使用 bash shell。到目前为止,我一直很喜欢它,但我想知道是否有办法做到上述事情?假设我的电脑上安装了 iTunes,我想从 Linux 终端打开它。这可能吗?我试过在终端中转到桌面文件夹并打开 .lnk 文件,但它只是向我抛出“无法执行二进制文件:Exec 格式错误”。有人知道这是否可能吗?

答案1

是的,WSL 支持启动 Windows 应用程序可执行文件(如 iTunes)在 shell 中。但是,正如评论中提到的,lnk文件不是不支持,因为它们不受可执行文件。 他们是链接到可执行文件。

WSL 还可以(默认)将 Windows 路径附加到 Linux 路径。因此,对于路径中的应用程序(例如notepad.exe),您可以直接使用该appname.exe格式启动它们。

对于不在路径中的应用程序(例如itunes.exe),您需要确定实际.exe(可执行文件)的位置,并使用完整路径启动它。这实际上与 Linux 下的任何 Linux 可执行文件或 Windows PowerShell 或 CMD 下的任何 Windows 可执行文件相同。

要查找 iTunes 的完整路径,只需右键单击lnk资源管理器中的文件并选择“特性”。 这“目标”字段将会出现类似的内容C:\Program Files\iTunes\iTunes.exe

如前所述,如果您尝试在 Windows PowerShell 或 CMD 解释器(bashLinux 下的 Windows“等效物”)中启动它,您仍然需要完整路径,因此您可以运行:

C:\Program Files\iTunes\iTunes.exe

bash要在 WSL 中启动该特定路径,您可以使用:

/mnt/c/Program\ Files/iTunes/iTunes.exe

如果您需要帮助将 Windows 路径转换为 ​​Linux 路径,则有一个命令可以实现:

wslpath 'C:\Program Files\iTunes\iTunes.exe'

有关 Windows/WSL 互操作性的详细信息,请参阅本文档

答案2

WSL 可以通过一些互操作性并使用binfmt_misc

LNKOTOH 不是可执行文件,而是一种存储元数据的文件,用于 Windows Shell 链接到任何类型的文件,而不仅仅是可执行文件。由于它是一个普通文件,您需要使用某些应用程序打开它。在 cmd 中,使用默认关联程序打开任何文件的方法是使用start。因此在旧版 WSL 中你可以这样做

cmd.exe /c start ~/Desktop/iTunes.lnk

显然%Windir%\System32必须在您的路径中(默认情况下是这样做的),否则您必须修复您的 WSL 环境。PowerShell 中的等效项是Start-Process或者Invoke-Item

powershell.exe -Command Start-Process ~/Desktop/iTunes.lnk
powershell.exe -Command Invoke-Item ~/Desktop/iTunes.lnk

对于大多数类型的文件,您也可以explorer.exe直接使用

explorer.exe ~/Desktop/iTunes.lnk

但是在 WSL2 中你有一个新命令可以执行此操作

wslview ~/Desktop/iTunes.lnk

一些其他的解决方案开始wsl-open开放


例如,以下任一命令都将在资源管理器中打开当前目录

explorer.exe .
wslview .
powershell.exe -Command Start-Process .
powershell.exe -C Invoke-Item .
cmd /c start .

或者打开一些 pdf 文件

explorer.exe my.pdf
wslview my.pdf
powershell.exe -Command Start-Process my.pdf
powershell.exe -C Invoke-Item my.pdf
cmd /c start my.pdf

相关内容