Wine 是在Linux 操作系統下執行部分Windows 應用程序的軟件! 如果你想在Linux下運Windows程序,Wine將是你必不可少的工具!Wine Is Not Emulator在X和UNIX之上的,Windows 3.x和Windows APIs的實現。它是一個Windows兼容層,這個層即提供了一個用來從Windows源進出到 UNIX 的開發工具包(Winelib);也提供了一個程序加載器,該加載器允許不用任何修改 Windows 3.1/95/NT 的二進制文件,就可以運行在 Intel Unix 及其衍生版本下。
Wine 不是Windows模擬器,而是用兼容模式調用DLL以運行Windows程序的軟件,不完美——作為兼容層可能出現程序崩潰、CPU占用率高、運行效率低等問題,有些涉及硬件的操作(如網銀)也無法完成;Wine是合法的,除非你調用了非正規授權的Windows DLL文件;Wine的開發高速進行中,Google Picasa for Linux就是一個建立在Wine上的程序,Disney加入Wine開發使得Photoshop能有效運行;只有32位的,不支持DOS等16位程序。
Wine 項目由 Bob Amstadt 于 1993 年發起,旨在尋求一種在 Linux 上運行 Windows 3.1 程序的辦法。不久之后,Alexandre Julliard 開始接手領導 Wine 的開發,從此由他管理這個項目。 多年以來,隨著 Windows API 和應用為了適應新硬件及軟件而不斷演變,Wine 也一直不斷發展來支持新的特性,移植到更多其他系統,并且更加穩定,提供著更好的用戶體驗。
通過確立一個宏偉的目標,在2008年項目到達 v1.0 之前,Wine 一直穩健地持續了 15 年之久,那是第一個穩定版。 多個版本以后,雖然還有許多工作要做,但今天 Wine 仍然在活躍地開發著。 并且有大約數以百萬人計的人們使用 Wine 在他們所選擇的系統上運行 Windows 軟件。
【功能特點】
可以做什么
本文中,我們討論的是 Wine 在純 Linux 上的安裝,沒有任何 Windows 分區。
1. Windows可執行文件:
Wine 完全支持 Windows可執行文件( .exe 和 DLL)的二進制加載。
2. DLL:
Wine 有幾百個 Windows DLL 的內部實現 -- 不過,其中沒有多少是完全的實現。例如,包含有用戶界面相關函數的 userd32.dll 在開放源代碼的 Wine 中實現了 92%。
3. COM:
這是一種幾乎被所有的大型 Windows應用程序所使用的 Windows 技術,它支持諸如將一個 Excel 電子數據表嵌入到 Word 文檔中等功能。這一技術得到了 Wine 的很好的支持。
4. 注冊表:
這是另一個幾乎任何一個 Windows應用程序都會使用的關鍵技術,Wine 實現了大約 90% 的 Windows 注冊表管理 API。
5. 核心功能:
核心系統功能也得到了特別好的支持。如前面提到的,盡管 Linux 和 Windows 之間存在區別,但是基本的層次上還有很多類似之處,因此與進程、線程、文件和消息隊列相關的核心系統 API 得到了近乎完美的支持。
6. 音頻和視頻:
Wine 支持 Windows 音頻和視頻文件的運行(還可以使用 Windows媒體播放器)。
7. 打印:
也得到了支持,可以從一個在 Wine 中運行的 Windows應用程序進行打印。
8. ODBC:
Wine 支持那些需要通過 ODBC 訪問數據庫的 Windows 應用程序。
9. 調試:
Wine 有一個非常健壯和強大的內置調試器,除了支持標準的調試功能外,它還為調試運行于 Linux 上的 Windows 二進制程序進行了定制。它是 Wine 為其開發者提供的最重要工具之一。Wine 還有一個設計完備的追蹤和記錄日志的模塊,可以幫助調試。我們之所以強調這一點,原因在于,盡管框架是健壯的,但是,當在 Wine 中安裝和運行 Windows應用程序時有很多不確定因素,在使用開放源代碼的 Wine 時遲早會停下來進行調試。
不能做什么
不幸的是,很多用戶發現 Wine 難于使用。誠然,在 Linux 上使用類似于 MS Office 這樣的應用程序可能是困難的;在這里我們來看一些原因,為什么確實是這樣。在開始之前,我們應該指出,CodeWeavers 提供的商用 Wine (CrossOver)已經解決了大部分此類問題(參閱參考資料以獲得鏈接)。假以時日,這些問題將可能在開放源代碼的 Wine 中同樣得到解決。
1. 使用命令行(早期版本)
與大部分 Linux 中的應用程序一樣,在開發早期 Wine 必須在命令行中安裝。用戶必須回到命令行中來在 Wine 下運行應用程序。例如,要運行Internet Explorer,用戶通常需要在 shell 中輸入 wine IEXPLORE.EXE 。盡管經驗豐富的用戶喜歡這樣做,但初學者會發現這比較困難,而且不太可能懂得起別名等快捷方式。不過,在較新的版本中用戶也可以直接雙擊EXE文件運行(如果進行了關聯)。盡管這樣會給查看錯誤信息帶來困難,但這無疑極大地方便了用戶的使用。
2. 配置
Wine 的配置較為復雜。除了命令行,較新的版本已經有了簡體中文的界面,對于初學者來說,配置簡單了不少。
3. 取消對隱藏文件的隱藏
如果掛載 CDROM 時沒有使用專門的 unhide 選項,那么安裝 CD 上的隱藏文件可能會無法找到,從而導致安裝失敗。
4. 額外的調整過程
Wine 安裝很少能直接使用(對它來說也就是從 tarfile 解開)。通常需要進行全面的調整;例如,一個程序的安裝可能與您在配置文件中設置的 Windows 版本不相容;而修改那個版本又可能會影響一些已安裝的應用程序。對很多 DLL 來說也是如此。為此,Wine 提供了一個巧妙的修復,讓您可以設置特定于應用程序的屬性,不過,一般的用戶可能不會像我們一樣滿意。
5. 額外的安裝步驟
大部分應用程序的安裝過程都不是標準的。例如當我們安裝 Internet Explorer 6 時,必須跳過一些步驟,比如 DCOM98 的定位與安裝。對用戶來說,這類事情可能是最大的障礙。
注意,這些并不是病癥,而是舉例說明了是哪些種類的事情導致對一般用戶來說 Wine 看起來復雜而且困難。
更多 Wine 所不能做的
看完 Wine 的可用性問題后,讓我們來總結在嘗試使用 Wine 時一些常見的技術問題。
1. 缺少 DLL
這可能是最常見的問題:很多安裝由于缺少 DLL 而失敗,這時需要熟練使用調試器來決定下一步(稍后將深入討論調試器)。解決問題的最佳方法是由錯誤信息尋找到所需的DLL,并進行安裝。這些都可能難倒初學者。
2. DLL 版本問題
一些安裝程序在開始之前會檢查現有的系統 DLL。Wine 解決這一問題的方法是,創建假 DLL 以滿足安裝程序的需要。不過,有一些安裝程序會更進一步并深入檢查 DLL 以獲得它們的版本。這對假的 DLL 來說要求太高了,會導致安裝失敗。
3. DLL 加載次序
Wine 有對很多 Windows DLL 的實現,而且如果可用,它還可以使用原始的 Windows DLL。如果兩種 DLL 都可用,在初學者看來應該選擇總是使用 Windows 自己的 DLL,但實際上 Windows DLL 有時會包含不能被滿足的依賴。要確定是更應該使用 Wine 的 DLL 還是應該使用本機 DLL,惟一的方法是,基于各個應用程序反復進行試驗。
4. DLL 中的函數
當一個 Wine DLL 沒有實現 Windows 中相應的 DLL 的全部功能時,應用程序可能會遭遇函數調用失敗。由于 DLL 是動態加載的,可能沒有辦法事先知道會發生這樣的事情。這是一個復雜的問題,有一些可做的工作,但最終實際來說它只是取決于應用程序的代碼如何編寫。
有一些因素會減輕這些問題。一方面,您可能會一個一個地遇到這些問題,而不是一次遇到全部問題,這樣處理起來要容易些。另外,您遇到的那些問題可能其他人曾遇到過并已經解決(而且解決方案已經公布出來)。Wine 用戶組非?;钴S,會提供許多幫助,每周一次的 Wine 時事通訊(參閱 參考資料)是極好的信息資源。
Wine 中還沒有實現的 Win32 API
在 Wine 中,很多 Win32 API5 的函數是殘缺不全的。最常見的原因是,相當多的 Win32 API 并沒有被文檔化。這就意味著一個特別的應用程序可能會調用某個函數,而完全沒有關于此函數的可用資料。例如,我們在運行一個簡單的 RPC 程序時發現了 RtlAnsiCharToUnicodeChar 這個函數。在 MSDN 上的搜索結果顯示沒有關于這個函數的資料,而且沒有關于所有 RtlXXXX 類別函數的資料。因此,如果它們在 Wine 中的實現對一些應用程序來說至關重要,那么人們可能只有去猜測它們的行為了。
【使用說明】
1、直接運行程序
使用命令 wine
[root@localhost root]#wine <程序名>
2、使用程序管理器
[root@localhost root]#progman
啟動管理器窗口,從菜單中選擇 文件(F)-執行(X),就會彈出一個目錄瀏覽器,選擇程序即可。
3、直接雙擊 EXE 程序
一些發行版安裝WINE時會自動關聯EXE程序,這樣直接雙擊可以運行。
某些簡單程序可直接運行,而不需要安裝。大部分Windows軟件的安裝,請由Wine打開安裝包(exe文件)然后和Windows下以同樣的方法安裝程序即可。這樣安裝的程序應當會在桌面環境的程序列表中自動添加快捷方式(和Windows下的快捷方式類似),選擇即可運行程序。