3 章. 安装/编译 Wine

目录
3.1. WWN #52 特征: 替代 Windows
3.2. 安装 Wine 而无须 Windows
3.3. 处理 FAT/VFAT 分区
3.4. SCSI 支持

如何安装 Wine...

3.1. WWN #52 特征: 替代 Windows

编写: Ove K鍁en

3.1.1. 安装概述

一个 Windows 安装由许多不同部分组成。

 

  • 注册表。即使在一个新安装的 Windows 系统中,都假定存在许多键并包含着有意义的数据。

  • 目录结构。应用程序期望在指定的预先决定的位置找到和/或安装东西。期望多数这些目录存在。但与 Unix 目录结构不同,多数这些位置是硬编码的(hardcode),并通过 Windows API 和注册表来查找。在 Wine 安装上这提出了额外的要求。

  • 系统 DLL。在 Windows 中,它们通常驻留在 system (或 system32)目录中。一些 Windows 应用程序在尝试装载它们之前在这些目录中检查它们的存在。当应用程序要求一个 DLL 而 Wine 不能装载它们自己的内部 DLL(.so 文件)时,Wine 不模拟不存在文件的存在。

尽管用户可以自由的自己设置所有的东西,Wine 小组仍将制作自动 Wine 安装脚本 tools/wineinstall,做我们认为必要的所有事情;除非你知道正在做什么,否则不推荐运行常规的 configure && make depend && make && make install 周期。此时,可使用 tools/wineinstall 来建立一个配置文件、安装注册表、并建立自己的目录结构。

3.1.2. 注册表

缺省的注册表在文件 winedefault.reg 中。它包含目录路径、类 ID、及其他东西;在多数 INSTALL.EXESETUP.EXE 运行之前必须安装它。在以前的文章中有对注册表非常详细的介绍。

3.1.3. 目录结构

下面是 Windows 应用程序和安装器所期望的基本格局。没有它,这些程序不能正确操作。

 

C:\       主磁盘驱动器的根目录
  Windows\     Windows 目录,包含 .INI 文件、附件等
    System\  

Win3.x/95/98/ME 给公用 DLL 的目录
WinNT/2000 给公用 16-bit DLL 的目录

    System32\   WinNT/2000 给公用 32-bit DLL 的目录
    Start Menu\   程序启动项目录结构
      Programs\ 到应用程序的程序启动项连接(.LNK 文件)
  Program Files\     应用程序二进制文件(.EXE 和 .DLL 文件)

 

Wine 通过把它们的虚拟驱动器根放置到 Unix 文件系统中用户可配置点上来模拟驱动器,所以你自己选择 C: 的根应该在哪(tools/wineinstall 会问你的)。如果你选择了,比如 /var/wine 作为你的虚拟驱动器 C 的根,则你应该把它放置到你的 ~/.wine/config 文件中:

[Drive C]
"Path" = "/var/wine"
"Type" = "hd"
"Label" = "MS-DOS"
"Filesystem" = "win95"
        

使用这个配置,被 windows 应用程序当作为 "c:\windows\system" 的目录将被映射为 UNIX 文件系统中的 /var/wine/windows/system 。注意你必须指定 "Filesystem" = "win95" 不是 "Filesystem" = "unix",来使 Wine 模拟 Windows-相容的(大小写不敏感)文件系统,否则多数应用程序将不能工作。

3.1.4. 系统 DLL

Wine 小组决定需要建立伪 DLL 文件来欺骗那些通过检查文件存在来确定是否可获得一个特征(比如 Winsock 和它的 TCP/IP 连网)的应用程序。如果你也有这个问题,你可以在 system 目录中建立一个空文件来让应用程序认为它存在,而在应用实际要求它的时候 Wine 将装载它的内置的 DLL。(不幸的是, tools/wineinstall 自身不建立这样的空文件。)

应用程序有时还尝试从物理文件中检查资源的版本(例如,要确定 DirectX 版本)。在这种情况下空文件就不起作用了,必须有完整版本资源的安装文件。当前正在处理这个问题。目前,你仍需获取一些真实的 DLL 来欺骗这些应用程序。

对于那些 wine 目前未很好实现(或根本未实现)的 DLL。如果不拥有一个真实的 Windows,则有的人将会窃取所需的 DLL,总是可以从象 http://solo.abac.com/dllarchive/ 这样的地方得到一个 DLL 归档。