V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
rrubick
V2EX  ›  Linux

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

  •  
  •   rrubick · 1 天前 · 1642 次点击
    前情提要 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 的虚拟机是装不上的,而事实上我已成功安装


    不知道大佬们还是否有别的解决方案
    47 条回复    2025-11-22 13:32:52 +08:00
    lpf0309
        2
    lpf0309  
       1 天前
    建议放弃,如果好做的话,这么多软件也不会提供 arm 和 amd 版本了了
    nivalxer
        3
    nivalxer  
       1 天前
    看起来物理机是 arm ,走 qemu 模拟 x86 在跑,所以性能很低是正常的(例如在 apple 的 m 芯片上 pd 跑 x86 的镜像也是如此)。但是程序应该是能正常运行的。提示 **不是一个有效的 Win32 应用程序**可能是.net framework 安装的问题,如果完全是模拟 x86 在跑的话,应该是可以跑的。
    rrubick
        4
    rrubick  
    OP
       1 天前
    @nivalxer #3
    xp 最高只支持到 .net framework 4.0, exe 实际依赖的是 4.5 。
    AI 解释这个报错应该是类似程序头已经标记了 4.5 版本,即使强行修改也会报其它错。
    lpf0309
        5
    lpf0309  
       1 天前
    你这活谁派给你的,我不知道这人是看得起你还是看不起你。你连源码都没有,还想换架构、换系统迁移,我经常用麒麟和 win ,有源码我都不敢保证能够迁移,你这还不如联系硬件厂商要 arm linux 驱动,然后再重写软件功能。你这硬件怎么交互得?你用虚拟机怎么保证这硬件能连到虚拟机的系统上。
    aosailuolierwang
        6
    aosailuolierwang  
       1 天前
    我就是专门搞 XC 改造的,明确告诉你这个搞不了。
    linhua
        7
    linhua  
       1 天前
    放弃吧,如果和硬件交互的话,windows 和 linux 完全不一样,得改代码
    Mithril
        8
    Mithril  
       1 天前
    Wine 是不行的,它只是转换 API 调用,不能转换架构。

    虚拟机是可行的,只要找个能用的 Windows 就行了。你可以试试关了 PageFile 等。

    但如果你那一堆 DLL 里面还有些 C++的,你找 XP 就不一定能运行了。

    以你目前的进度看,最可能的办法就是看看怎么改进 Windows 7 的虚拟机性能。
    ysc3839
        9
    ysc3839  
       1 天前 via Android
    安装 Win10 ARM 呢?
    yinmin
        10
    yinmin  
       1 天前 via iPhone
    反编译成 c#源码,然后升级到 net core (需要调整源码),再编译成 arm64 linux 版本。
    duzhuo
        11
    duzhuo  
       1 天前
    和硬件交互 感觉很复杂
    yinmin
        12
    yinmin  
       1 天前 via iPhone
    qemu 安装 windows 10 arm64 版,win 10 arm64 版是能直接跑 x86 或 x64 的,而且是高速跑。
    rrubick
        13
    rrubick  
    OP
       23 小时 42 分钟前
    @lpf0309 #5
    现在只是第一步想先跑起来,准备后面再说虚拟机怎么连外部网络。
    有的厂商都停产了,没驱动
    rrubick
        14
    rrubick  
    OP
       23 小时 41 分钟前
    @Mithril #8
    目前 AI 都是给出安装 virtio 还有 guest tools 啥的,但是装不上。。。
    rrubick
        15
    rrubick  
    OP
       23 小时 39 分钟前
    @ysc3839 #9
    @yinmin #12
    arm64 能跑 x86 这我倒是不知道,我试试。关键是不知道驱动能不能适用
    ysc3839
        16
    ysc3839  
       23 小时 35 分钟前 via Android
    @rrubick 要装什么驱动?
    saleacy
        17
    saleacy  
       23 小时 32 分钟前 via Android
    openssh
    kekxv
        18
    kekxv  
       23 小时 30 分钟前 via iPhone
    你确定 wine 能跑?
    如果可以,试试虚拟机 Linux x86 ,而不是虚拟 Windows
    passive
        19
    passive  
       23 小时 26 分钟前 via Android
    弄台国产 via 装 Windows 把硬件驱动代理成 API 在 arm 机器上调用。
    rrubick
        20
    rrubick  
    OP
       23 小时 19 分钟前
    @ysc3839 #16
    里面一大堆,涉及到硬件的
    rrubick
        21
    rrubick  
    OP
       23 小时 18 分钟前
    @kekxv #18
    主要是有很多 dll 驱动,在 arm 上跑不了
    ysc3839
        22
    ysc3839  
       23 小时 13 分钟前 via Android
    @rrubick 如果是涉及内核驱动,那就不能用 ARM 系统了
    liyafe1997
        23
    liyafe1997  
       23 小时 9 分钟前
    目前来看,性能&兼容性最最最好的方案应该就是 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
        24
    liyafe1997  
       23 小时 8 分钟前   ❤️ 1
    补充:
    https://github.com/alzhahirdev/winebox86
    搜到这个看起来更好,连 Wine 都给你打包进去了
    liyafe1997
        25
    liyafe1997  
       23 小时 6 分钟前
    噢对,也许还有一个方案,装 Win11 on ARM64 虚拟机,然后里面是能跑 x86 exe 的。
    liyafe1997
        26
    liyafe1997  
       23 小时 2 分钟前   ❤️ 1
    @rrubick dll 不是驱动,或者说是用户态驱动,x86 dll 在 Win on ARM 下不是问题。
    sys 才是真正的内核态驱动,就看你的硬件有没有内核态驱动需求了。你的硬件是怎么连接的? USB ?串口?出现在设备管理器里面是什么东西?

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

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

    ps:既然你用虚拟机,其实可以在你自己电脑开虚拟机测试好了再去折腾你的 arm
    rrubick
        28
    rrubick  
    OP
       22 小时 54 分钟前
    @ysc3839 #22
    @liyafe1997 #23
    我不清楚是不是内核驱动,里面包含打印机和读卡器啥的一类的。
    准备先装个 arm64 的 win10 试试
    rrubick
        29
    rrubick  
    OP
       22 小时 52 分钟前
    @kekxv #27
    一点源码没有,只有打包好的程序,没法借鉴。
    kekxv
        30
    kekxv  
       22 小时 40 分钟前
    @rrubick 不需要借鉴,c#打出来的 exe 可以当作 c#的 dll 直接引入调用
    Lockroach
        31
    Lockroach  
       21 小时 57 分钟前
    最简单的方案是直接基于新架构重构了
    guanzhangzhang
        32
    guanzhangzhang  
       21 小时 25 分钟前
    如果有过好几门编程语言经验,并且在非 crud 方面有过独立开发,可以试试学下 c#去搓一个替代品
    kokutou
        33
    kokutou  
       21 小时 9 分钟前 via Android
    @rrubick
    大概率跑起来也连不了硬件的
    Calidum
        34
    Calidum  
       20 小时 53 分钟前
    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
        35
    winstars  
       20 小时 30 分钟前 via Android
    @Mithril 换架构了那就不是虚拟机的事情了,而是模拟器,类似于用 pc 玩 nds 掌机的那种
    winstars
        36
    winstars  
       20 小时 29 分钟前 via Android
    @yinmin xc 性能弱到渣,别试了,卡得你怀疑人生
    cowcomic
        37
    cowcomic  
       20 小时 20 分钟前
    感觉不行,同时跨 CPU 架构+OS ,除非像苹果那样出一个指令级别的转译功能
    不过还是插个眼,要是搞定了,来学习学习
    nivalxer
        38
    nivalxer  
       18 小时 5 分钟前
    @rrubick virtio 还有 guest tools 装不上是正常的。是 arm 物理机,通过 qemu 安装的 x86 系统,是模拟 x86 在跑,这个模式性能低,兼容性也差。可以试试 windows 10/windows 11 arm64 版本,试试直接虚拟机安装。windows 11 的 arm 兼容性更好一些,对于 x86 程序,包括 C++程序支持模拟运行,除了一些特定的系统驱动没办法运行,大部分都是可以跑的。
    datou
        39
    datou  
       17 小时 33 分钟前
    一眼上位机程序,联系设备厂商问问
    zhangeric
        40
    zhangeric  
       12 小时 32 分钟前
    .net 的程序,可以用 ilspy 等工具看到源码的,花钱找人破译,再升级到.net core 框架,走跨平台的路子.注意啊,这样做成功的概率不到一半,我是建议重新找人开发个新软件.
    i8086
        41
    i8086  
       11 小时 56 分钟前
    看了原帖内容,这部分不叫迁移,需要重写。

    架构都不一样,兼容做法是还是需要 windows 机器,并不是无脑全部 arm ,找领导沟通吧。

    既然人家技术回复不支持,就不要折腾,坑肯定是一大堆的。
    doosit
        42
    doosit  
       10 小时 35 分钟前
    试试铠大师,希望可以帮到你
    RobinHuuu
        43
    RobinHuuu  
       9 小时 59 分钟前 via Android
    不是,到底要调用什么硬件,各种虚拟方案能访问到硬件吗?
    devtk
        44
    devtk  
       9 小时 43 分钟前
    看上去是个大活,连源码都没有,难
    ltyj2003
        45
    ltyj2003  
       8 小时 28 分钟前 via Android
    就说干不了,勉强跑其他也是一堆未知问题,申请经费买套新的。
    HojiOShi
        46
    HojiOShi  
       8 小时 27 分钟前
    这种活你不条件反射般地当场拒绝,资历还是太浅了。我同事自己的源码,和硬件交互不深的,适配这些系统都花了大半年时间。没源码是怎么敢包揽这种活的?
    jasm
        47
    jasm  
       7 小时 38 分钟前
    尝试过 wine+box 的方案,折腾好几天也仅仅只是勉强跑起来,实际使用后面一堆坑,动不动崩溃
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:11 · PVG 21:11 · LAX 05:11 · JFK 08:11
    ♥ Do have faith in what you're doing.