[求救]怎么在 arm64 的麒麟 v10 上运行 win32 的 exe

1 天前
 rrubick
前情提要 https://www.v2ex.com/t/1154926#reply49

目前已知项目情况:
1. 没有源码,只有一个文件夹,因为要和硬件交互,内部含有大量 dll ,靠运行一个 32 位的 exe 来启动
2. 基于 .net framework 4.5

已做尝试:

1. 虚拟机方案 qemu + virt-manager

1.1 安装 xp ,并安装 .net framework 4.0, 运行 exe 提示 **不是一个有效的 Win32 应用程序**

1.2 安装 32 位和 64 位 win7 ,给了 4G 或者 8G 内存,卡顿严重。在 32 位上运行 exe 卡住无法打开。AI 说要安装 virtio 驱动,但是即使是管理员身份依然提示没有权限

2. Wine/Wine64 + Box86/Box64

只成功安装了 Box64 ,Box86 安装失败。使用 Box64 无法运行 32 位 exe

3. 求助麒麟技术支持

多位支持说 x86 的虚拟机是装不上的,而事实上我已成功安装


不知道大佬们还是否有别的解决方案
1696 次点击
所在节点    Linux
47 条回复
rrubick
1 天前
@kekxv #18
主要是有很多 dll 驱动,在 arm 上跑不了
ysc3839
1 天前
@rrubick 如果是涉及内核驱动,那就不能用 ARM 系统了
liyafe1997
1 天前
目前来看,性能&兼容性最最最好的方案应该就是 Box86 了,但是 Box86 只能 ARM32 ,这是最头疼的点。但凡你的 exe 是 x64 的,能跑 Box64 on ARM64 ,都方便得多。

我之前这么在 RK3566 ( 4 核 A53 )上跑过 x64 exe ,就是典型的 Qt 工业 GUI 应用,性能完全是非常可用的程度。

如果你目前的 ARM64 的 Linux 不好装上 ARM32 支持库/坑太多的话,也许可以试试一些 Box86 Docker ?
https://github.com/DerpyChap/box86-docker
看起来这个能在 ARM64 上 Box86 开箱即用
liyafe1997
1 天前
补充:
https://github.com/alzhahirdev/winebox86
搜到这个看起来更好,连 Wine 都给你打包进去了
liyafe1997
1 天前
噢对,也许还有一个方案,装 Win11 on ARM64 虚拟机,然后里面是能跑 x86 exe 的。
liyafe1997
1 天前
@rrubick dll 不是驱动,或者说是用户态驱动,x86 dll 在 Win on ARM 下不是问题。
sys 才是真正的内核态驱动,就看你的硬件有没有内核态驱动需求了。你的硬件是怎么连接的? USB ?串口?出现在设备管理器里面是什么东西?

如果是 USB ,可能直接走的 USB HID ,或者 USB 转串口,那这种基本都不是问题,甚至 libusb/winusb 也不是问题。但是如果是专有.sys 内核态驱动就不行了。
不过这种不常见,一般而言,要么走 HID/libusb/winusb ,要么是个 USB 串口。
kekxv
1 天前
@rrubick 你先试试能不能再 Linux x86 下跑,可以的话,就用虚拟机跑 Linux x86 测试。

如果还是不行,有个邪门的方法:
- 你只是要和硬件交互,也就是不需要 UI 对吧?
- 那么你可以看看 c# 怎么作为一个 http 服务器提供 api 接口
- 另外,c#的 exe 可以作为库引入 vs 开发进行调用
- 然后你改完之后,可以再试试你的 windows 虚拟机

ps:既然你用虚拟机,其实可以在你自己电脑开虚拟机测试好了再去折腾你的 arm
rrubick
1 天前
@ysc3839 #22
@liyafe1997 #23
我不清楚是不是内核驱动,里面包含打印机和读卡器啥的一类的。
准备先装个 arm64 的 win10 试试
rrubick
1 天前
@kekxv #27
一点源码没有,只有打包好的程序,没法借鉴。
kekxv
1 天前
@rrubick 不需要借鉴,c#打出来的 exe 可以当作 c#的 dll 直接引入调用
Lockroach
1 天前
最简单的方案是直接基于新架构重构了
guanzhangzhang
1 天前
如果有过好几门编程语言经验,并且在非 crud 方面有过独立开发,可以试试学下 c#去搓一个替代品
kokutou
1 天前
@rrubick
大概率跑起来也连不了硬件的
Calidum
1 天前
1. Wine64 9.0 开始有 WoW64 功能,有开启就能跑 32 位 x86 。安装好 Box64/Fex 运行 Wine64 就行。
3. Box64 开启 Box32 或者 Fex 也能跑 32 位的 Wine 。性能比跑 WoW64 好。
3. Hangover 基于 Arm64 版 Wine 性能好,ARM64EC 功能只对 x86 、x86_64 部分做转译。转译 32 位 x86 部分由 Box64/Fex 负责 (wowbox64.dll /libwow64fex.dll)。

x86 理论上 Hangover 用 wowbox64.dll 性能最好。

PS: 就算是龙芯和 RISC-V 架构也有用类似方案。
winstars
23 小时 41 分钟前
@Mithril 换架构了那就不是虚拟机的事情了,而是模拟器,类似于用 pc 玩 nds 掌机的那种
winstars
23 小时 40 分钟前
@yinmin xc 性能弱到渣,别试了,卡得你怀疑人生
cowcomic
23 小时 31 分钟前
感觉不行,同时跨 CPU 架构+OS ,除非像苹果那样出一个指令级别的转译功能
不过还是插个眼,要是搞定了,来学习学习
nivalxer
21 小时 16 分钟前
@rrubick virtio 还有 guest tools 装不上是正常的。是 arm 物理机,通过 qemu 安装的 x86 系统,是模拟 x86 在跑,这个模式性能低,兼容性也差。可以试试 windows 10/windows 11 arm64 版本,试试直接虚拟机安装。windows 11 的 arm 兼容性更好一些,对于 x86 程序,包括 C++程序支持模拟运行,除了一些特定的系统驱动没办法运行,大部分都是可以跑的。
datou
20 小时 43 分钟前
一眼上位机程序,联系设备厂商问问
zhangeric
15 小时 43 分钟前
.net 的程序,可以用 ilspy 等工具看到源码的,花钱找人破译,再升级到.net core 框架,走跨平台的路子.注意啊,这样做成功的概率不到一半,我是建议重新找人开发个新软件.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1174277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX