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

2024-10-29 08:35:00
admin
原创
184
摘要:问题描述:随着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 在实现符号链接时是否存在错误?

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1284  
  IPD 测试流程概述IPD(Integrated Product Development)即集成产品开发,是一套先进的产品开发管理理念、模式和方法。IPD 测试流程作为其中关键的一环,旨在确保产品从概念设计到最终交付的整个过程中,都能满足预定的质量标准。它贯穿于产品开发的各个阶段,从需求分析阶段开始介入,对产品需求进行...
IPD测试流程   0  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理理念和方法,对产品生命周期有着深远且全面的影响。它打破了传统产品开发过程中各部门之间的壁垒,强调跨部门协作、并行工程以及基于市场和客户需求驱动的开发模式,从产品的构思到最终退出市场的整个生命周期中发挥着关键作用。...
IPD开发流程管理   0  
  在项目管理领域,IPD(集成产品开发)测试流程作为确保产品质量、推动项目走向成功的关键环节,正日益受到广泛关注。IPD 测试流程并非孤立存在,它与项目成功之间存在着千丝万缕的联系。深入探讨这种关系,对于提升项目管理水平、保障项目顺利交付以及实现产品的市场成功具有重要意义。IPD 测试流程的核心要点IPD 测试流程涵盖了...
小米IPD流程   0  
  IPD(Integrated Product Development)产品开发流程旨在通过整合跨部门资源,实现高效、高质量的产品开发。在这一流程中确保项目质量至关重要,关乎产品在市场上的竞争力与企业的长远发展。以下将从多个关键方面探讨如何在 IPD 产品开发流程中保障项目质量。明确质量目标与标准在 IPD 产品开发流程...
IPD培训课程   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用