亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

在Linux上如何運行Windows應用程序(1)
2006-08-30   easywine

2004 年 4 月

Wine 是一個令人神往而且目標遠大的開放源代碼項目,它嘗試去解決在 Linux 上運行 Windows 可執行文件的復雜問題。盡管 Wine 不是一個新項目,但是,人們對 Linux 桌面的期望以及對 Linux 應用程序的需求日益增加,使得它現在仍具有重要意義。本文對 Wine 進行了介紹,并提出了幾種獲得 Wine 內部操作經驗的途徑。

Wine 項目起始于 1993 年,它的根源可以追溯到 90 年代早期出現的用于 UNIX 的 DOS 和 Windows 模擬器。Wine 項目最初是將 16 位的應用程序移植到 Linux,而幾年之后,已可以在 Linux 上運行 Microsoft Word 和 Excel。現在它有一百多萬行代碼。

人們一直認為,在桌面上采用 Linux 的主要障礙是應用程序不足。商用桌面應用程序供應商還不能確定他們是否應該投入時間和精力將他們的 Windows 應用程序移植到 Linux,他們基本上是在等待 Linux 大規模應用于桌面。另一方面,Linux 需要應用程序才能大規模應用于桌面。這是一個經典的先有雞還是先有蛋的問題,而 Wine 通過在 Linux 上運行現有的 Windows 應用程序而解決了這一問題。

Wine 能做什么

Wine 項目實際是一個二合一的項目。它們提供了一個名字叫做 Winelib 的開發工具包,用于將應用程序從 Windows 移植到 Linux(和 Unix);它們還提供了一個程序加載器,讓 Windows 二進制文件可以在 Unix 和類 Unix 系統中運行。本文討論的主要是后者;在 參考資料中有關于 Winelib 的更多資料的鏈接。

Wine 程序加載器讓運行于 x86 上的 Linux 和其他類 Unix 操作系統可以加載并運行 Windows x86 可執行文件 -- 不過那只是它要解決的問題的一部分。因為 Windows 可執行文件總是會鏈接到其他庫,而這些庫是 Windows 操作系統的一部分(如本文稍后圖 1 中的 Dependency Walker 截圖中可以看到),Wine 還最大可能限度地實現了那些 Windows 內部構件,即 Linux 上通常所指的 Win32 API5。

雖然 Windows 和 Linux 有很大的不同,但是就基本的層次而言,與任何現代操作系統一樣,還是有很多類似之處的 -- 比較明顯的包括,對文件和目錄的支持,對同時運行多個程序的支持,類似的用戶界面以及對多媒體的支持。

不是仿真器

據 WineHQ的說法,“WINE 代表 Wine Is Not an Emulator(即,Wine 不是一個仿真器)。更確切地說,Wine 是 X 和 UNIX 之上對 Windows API 的一個開放源代碼實現。您可以認為它是一個 Window 兼容層。Wine 不需要 Microsoft Windows,因為它是由 100% 非 Microsoft 代碼構成的另一個實現。但是它可以使用本機系統 DLL,只要這些 DLL 可用。而且它可以讓您在 Linux 或者其他類 UNIX 操作系統之上運行大部分 Windows 軟件。”

顯示了 callDLL.exe 的依賴,這個可執行文件可以由本文提供的源代碼編譯得到。對一般的用戶而言,依賴的復雜度可能是驚人的,但對任何一個系統程序員來說都不是這樣,他們充分了解,哪怕是運行一個最簡單的程序,操作系統也必須要做很多事情。

考慮可執行文件的第一個依賴 -- 對 USER32.DLL 的依賴。在 Windows 中,一個 DLL 就是一個動態鏈接庫(dynamically linked library),類似于 Linux 中的一個共享對象(一個 .so 文件)。USER32.DLL 文件通常會由操作系統提供,位于 C:\WINDOWS\system32 或者 C:\WINNT\system32 目錄下。這個文件中包含了 Windows API 中用于用戶界面的函數實現。

我們的可執行文件調用 USER32.DLL 中的一些函數,USER32.DLL 然后去調用 NTDLL.DLL 中的其他函數,如此繼續。這些函數大部分已經由 Microsoft 文檔化 -- 但是還有很多沒有被文檔化。文檔的缺乏對 Wine 來說是一個極大的障礙,本文稍后將更詳細地討論這一問題。

現在讓我們來看我們的可執行文件的第二個依賴 -- 對 SIMPLEDLL.DLL 的依賴。這個 DLL 是在編譯本文所附的源代碼時創建的。這個 DLL 中實現了一些特別簡單的函數;它作為常見于安裝 CD 上的各種二進制文件的例子被包括進來。

如我們的例子所示,一般的 Windows 可執行文件有兩種類型的依賴:一種是對操作系統提供的二進制文件的依賴,另一種是對作為應用程序一部分的二進制文件的依賴。

還需要特別注意的是,DLL 以難于管理而聞名,即使是在產生它們的 Windows 操作系統中也是如此(參見 參考資料)。值得一提的是,Wine 團隊成功地創建了一個可以在 Linux 上運行很多商用 Windows 應用程序的框架

當前,開放源代碼的 Wine 項目有一個健壯的平臺來運行 Windows 二進制文件以及對 Win32 API 的部分實現。這個項目仍然處于最初的測試階段(alpha),有很多部分還沒有完成。盡管 Wine 提供了一些工具來幫助進行配置、安裝以及運行應用程序,但是它們大部分都是面向程序員的,要讓非技術用戶也可以使用這些工具,還有很多事情需要去做。過去的 Corel 以及現在的 CodeWeavers 為此提供了很多幫助。

Wine 如何工作

既然我們已經理解了 Wine 的基本原理,讓我們更詳細地來研究 Wine 能夠做什么。本文中,我們討論的是 Wine 在純 Linux 上的安裝,沒有任何 Windows 分區。

Windows 可執行文件:

Wine 完全支持 Windows 可執行文件( .exe 和 DLL)的二進制加載。

DLL:

Wine 有幾百個 Windows DLL 的內部實現 -- 不過,其中沒有多少是完全的實現。例如,包含有用戶界面相關函數的 userd32.dll 在開放源代碼的 Wine 中實現了 92%。

COM:

這是一種幾乎被所有的大型 Windows 應用程序所使用的 Windows 技術,它支持諸如將一個 Excel 電子數據表嵌入到 Word 文檔中等功能。這一技術得到了 Wine 的很好的支持。

注冊表:

這是另一個幾乎任何一個 Windows 應用程序都會使用的關鍵技術,Wine 實現了大約 90% 的 Windows 注冊表管理 API。

核心功能:

核心系統功能也得到了特別好的支持。如前面提到的,盡管 Linux 和 Windows 之間存在區別,但是基本的層次上還有很多類似之處,因此與進程、線程、文件和消息隊列相關的核心系統 API 得到了近乎完美的支持。

音頻和視頻:

Wine 支持 Windows 音頻和視頻文件的運行(還可以使用 Windows 媒體播放器)。

打印:

也得到了支持,可以從一個在 Wine 中運行的 Windows 應用程序進行打印。

ODBC:

Wine 支持那些需要通過 ODBC 訪問數據庫的 Windows 應用程序。

調試:

Wine 有一個非常健壯和強大的內置調試器,除了支持標準的調試功能外,它還為調試運行于 Linux 上的 Windows 二進制程序進行了定制。它是 Wine 為其開發者提供的最重要工具之一。Wine 還有一個設計完備的追蹤和記錄日志的模塊,可以幫助調試。我們之所以強調這一點,原因在于,盡管框架是健壯的,但是,當在 Wine 中安裝和運行 Windows 應用程序時有很多不確定因素,在使用開放源代碼的 Wine 時遲早會停下來進行調試。

Wine 不能做什么

不幸的是,很多用戶發現 Wine 難于使用。誠然,在 Linux 上使用類似于 MS Office 這樣的應用程序可能是困難的;在這里我們來看一些原因,為什么確實是這樣。在開始之前,我們應該指出,CodeWeavers 提供的商用 Wine 已經解決了大部分此類問題(參閱 參考資料以獲得鏈接)。假以時日,這些問題將可能在開放源代碼的 Wine 中同樣得到解決。

使用命令行與大部分 Linux 中的應用程序一樣,Wine 必須在命令行中安裝。用戶必須回到命令行中來在 Wine 下運行應用程序。例如,要運行Internet Explorer,用戶通常需要在 shell 中輸入 wine IEXPLORE.EXE 。盡管經驗豐富的用戶喜歡這樣做,但初學者會發現這比較困難,而且不太可能懂得起別名等快捷方式。

配置

CDROM 和驅動器映射等工作必須手工完成。這對初學者來說也是個問題。

取消對隱藏文件的隱藏

如果掛載 CDROM 時沒有使用專門的 unhide 選項,那么安裝 CD 上的一些文件可能會無法找到,從而導致安裝失敗。

調整配置

Wine 安裝很少能直接使用(對它來說也就是從 tarfile 解開)。通常需要進行全面的調整;例如,一個程序的安裝可能與您在配置文件中設置的 Windows 版本不相容;而修改那個版本又可能會影響一些已安裝的應用程序。對很多 DLL 來說也是如此。為此,Wine 提供了一個巧妙的修復,讓您可以設置特定于應用程序的屬性。不過,一般的用戶可能不會像我們一樣滿意。

額外的安裝步驟

大部分應用程序的安裝過程都不是標準的。例如,當我們安裝 Internet Explorer 6 時,必須跳過一些步驟,比如 DCOM98 的定位與安裝。對用戶來說,這類事情可能是最大的障礙。

注意,這些并不是病癥,而是舉例說明了是哪些種類的事情導致對一般用戶來說 Wine 看起來復雜而且困難。

熱詞搜索:

上一篇:雕蟲小技 教你嚇走想要動你電腦的人
下一篇:在Linux上如何運行Windows應用程序(2)

分享到: 收藏