如何从 WSL(Ubuntu)Bash 运行 Windows 可执行文件

2024-10-29 08:35:00
admin
原创
50
摘要:问题描述:随着2016 年夏季Windows 10 周年更新的推出,人们可以在新的“轻量级”虚拟化子系统Windows Linux 子系统 (WSL)中运行ubuntu二进制文件。不幸的是,启动C:WindowsSystem32ash.exe另一个bashELF 二进制文件会启动 WSL 内部的一个进程,您...

问题描述:

随着2016 年夏季Windows 10 周年更新的推出,人们可以在新的“轻量级”虚拟化子系统Windows Linux 子系统 (WSL)中运行ubuntu二进制文件。

不幸的是,启动C:WindowsSystem32ash.exe另一个bashELF 二进制文件会启动 WSL 内部的一个进程,您无法从中退出!您只能启动其他 ELF 二进制文件。

那么我怎样才能*.exe从 Windows Bash 执行文件?[1]

[1]微软“官方” GH 支持 repo中也提出了这个问题。


解决方案 1:

在Windows 10 Creators Update(版本 1703,2017 年 4 月)中,此功能已得到原生支持。因此,您现在可以从 Linux 运行 Windows 二进制文件...

notepad.exe或任何其他.exe(需要扩展,并且需要位于您的路径上,某些旧版本需要完整路径)

...反之亦然,使用下列方法之一:

  • bash.exe -c command_to_runIE:bash.exe -c ls

  • bash -c command_to_runIE:bash -c ls

  • wsl command_to_run即:wsl "ls";或者使用以下命令指定您想要使用的发行版:

    • ubuntu run ls

欲了解更多信息,请参阅上面链接的文章。

解决方案 2:

原生解决方案

Windows 10 Insider Preview 更新(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:通过 调用 win-executable cmd.exe

  • wrun:使用 同步调用 win 可执行文件CreateProcess,并等待死亡(不使用cmd.exe)。

  • wstart:启动一个分离的(异步)命令(使用cmd.exe)。

为了使用它们,您必须:

  1. 安装cbwin

* 一个新的`outbash.exe`将安装在您的常规 Windows 文件系统中(在您的某个位置`%PATH%`),加上
* WSL 文件系统中的 3 个 linux 命令。
  1. 使用它outbash.exe(无论你在哪里安装它)来启动 WSL,而不是C:WindowsSystem32ash.exe

  2. 在任何 win-executables 前面加上其中一个命令,例如wrun notepad

提示:如果可执行文件随其一起启动wcmd或者wrun产生了任何子项,那么这些子项只会在该可执行文件存活期间存活。

换句话说,尝试notepad.exewcmd不工作的方式启动,因为记事本在启动后就会被杀死——在这种情况下使用wrun(同步)或wstart(异步)。

解决方案 3:

为什么不直接使用

$ powershell.exe Start filename

Start是 Windows 上与xdg-open大多数 Linux 或openmacOS 上的等价物,意思是“使用默认桌面应用程序打开”。我喜欢将其别名为 open。

解决方案 4:

我使用别名。

alias aws="/mnt/c/Program Files/Amazon/AWSCLIV2//aws.exe"
alias kubectl="/mnt/c/ProgramData/chocolatey/bin/kubectl.exe"
alias kubectx="/mnt/c/ProgramData/chocolatey/bin/kubectx.exe"
alias kubens="/mnt/c/ProgramData/chocolatey/bin/kubens.exe"
alias pytest=pytest.exe

解决方案 5:

虽然.exe从命令行运行 可以,但从 PHP 运行 时却exec()无法让它工作。/init但是,添加 可以工作。这是我/usr/local/bin/convert在 Windows 上安装的 GraphicsMagick 的工作文件:

#!/bin/sh
/init "$(ls /mnt/c/Program*/GraphicsMagick*/gm.exe|tail -1)" convert "$@"

解决方案 6:

我对此有点困惑。我添加了一个符号链接:

$ ls -l /c                                                                                               
lrwxrwxrwx 1 root root 5 Dec  3 10:24 /c -> mnt/c  

现在 ls /c 给出的结果与 ls /mnt/c 相同

但是现在:/c/Program\ Files/Java/jdk1.8.0_211/bin/java.exe -version ==> 没有

然而:

/mnt/c/Program Files/Java/jdk1.8.0_211/bin/java.exe  -version 
java version "1.8.0_211"                                                                                                Java(TM) SE Runtime Environment (build 1.8.0_211-b12)                                                                   Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode) 

其他 Windows 可执行文件也发生了同样的事情。WSL 在实现符号链接时是否存在错误?

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用