TechTalk

Wine on MAC

字数统计: 941阅读时长: 4 min
2022/05/10

今天在做一个分析工作的时候,最终发现windows上的一个程序更加的高效,自然而然就想到了使用wine。wine (Wine is Not Emulator)是一个跨平台解释执行Windows程序的程序。
通过wine已经在2018年后不怎么维护了,最终在reddit的一个帖子中找到了一个叫做wineskin的软件,通过brew安装后,发现该软件与我的mac big sur不兼容,程序无响应,无奈将其卸载掉了。
接下来发现wine有一个兼容big sur和catalina的版本wine crossover版本,该软件的github地址如下:链接,通过brew安装该软件:

1
brew install --cask --no-quarantine gcenx/wine/wine-crossover

该软件支持32位和64位的执行环境,通过命令可以创建不同的执行环境,下面的这条命令是创建了一个32位程序的执行环境:
1
WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg

其中WINPREFIX是这个执行环境所需要的上下文相关环境信息路径。
通过wine xxx.exe命令行运行软件,通过wine winecfg运行配置程序。

默认情况下通过wine运行起来的程序都显示豆腐块文字,因为wine的系统上并没有安装必要的字体。通过一番搜索发现可以这样解决这个问题:

  1. 下载一个ttc格式的字体,我这里下载的是文泉驿字体
  2. 把下载好的字体放到WINEPREFIX下的Windows/Fonts文件夹下。
  3. 将这个gist代码片段保存到本地文件中例如chn-font.reg。
  4. wine regedit打开注册表程序,然后在第一个菜单的第一个菜单项导入上一步的reg文件。
    此时中文字体就这个WINE环境生效了。
    winecfg
    如图所见,winecfg配置程序显示了中文字体。

接下来要运行GDA程序,结果提示缺少MFC42.dll库:

1
2
3
4
5
6
wine ~/Downloads/gda-test/GDA4.00.exe 
002c:err:winediag:WS_getaddrinfo Failed to resolve your host name IP
0094:err:plugplay:process_IOService_Device object 0x4303
0094:err:plugplay:process_IOService_Device Unable to create plug in interface for USB deviceobject 0x4307
0024:err:module:import_dll Library MFC42.DLL (which is needed by L"Z:\\Users\\xxx\\Downloads\\gda-test\\GDA4.00.exe") not found
0024:err:module:LdrInitializeThunk Importing dlls for L"Z:\\Users\\xxx\\Downloads\\gda-test\\GDA4.00.exe" failed, status c0000135

接下来只要将MFC42.DLL下载下来放在DLL路径下就可以了,这里我们不采用这样的手动的方式而是使用winetricks这样的脚手架程序,同样也是通过brew安装winetricks:
1
brew install winetricks

设定WINEPREIX后执行winetricks安装mfc库(会弹出确认安装对话框,同意即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
WINEPREFIX=~/.wine32 winetricks mfc42
warning: taskset/cpuset not available on your platform!
------------------------------------------------------
warning: Github down? version '' doesn't appear to be a valid version
------------------------------------------------------
Executing mkdir -p /Users/xxx
Using winetricks 20220411 - sha256sum: 69856050cfe9d97902dfd68c1ad42a10a4be0fe76660744126d7e3ed75610495 with wine-6.0 and WINEARCH=win32
Executing w_do_call mfc42
Executing mkdir -p /Users/xxx
Executing load_mfc42
Executing mkdir -p /Users/x x x/.cache/winetricks/vcrun6
Executing cd /Users/xxx/.cache/winetricks/vcrun6
Downloading https://download.microsoft.com/download/vc60pro/Update/2/W9XNT4/EN-US/VC6RedistSetup_deu.exe to /Users/xxx/.cache/winetricks/vcrun6
--2022-05-10 12:11:07-- https://download.microsoft.com/download/vc60pro/Update/2/W9XNT4/EN-US/VC6RedistSetup_deu.exe
正在解析主机 download.microsoft.com (download.microsoft.com)... 124.205.198.170, 124.205.198.162, 124.205.198.173, ...
正在连接 download.microsoft.com (download.microsoft.com)|124.205.198.170|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1837888 (1.8M) [application/octet-stream]
正在保存至: “VC6RedistSetup_deu.exe”

VC6RedistSetup_deu.exe 100%[=========================================================================>] 1.75M 7.65MB/s 用时 0.2s

2022-05-10 12:11:08 (7.65 MB/s) - 已保存 “VC6RedistSetup_deu.exe” [1837888/1837888])

Executing cd /Users/xxx/.wine32/drive_c/Windows/fonts
Executing wine /Users/xxx/.cache/winetricks/vcrun6/VC6RedistSetup_deu.exe /T:C:\windows\Temp /c
Executing cabextract -q /Users/xxx/.cache/winetricks/vcrun6/vcredist.exe -d /Users/xxx/.wine32/dosdevices/c:/windows/system32 -F mfc42*.dll

结束后,发现程序仍然打不开,暂时还不知道是不是dll搜索路径的问题,索性把windows/system32/下的mfc42*.dll都复制到exe所在的路径下,在用wine打开就没有问题了。

CATALOG