wine[兼容層]

wine[兼容層]
wine[兼容層]
更多義項 ▼ 收起列表 ▲

Wine (“Wine Is Not an Emulator” 的遞歸縮寫)是一個能夠在多種 POSIX-compliant 作業系統(諸如 Linux,Mac OSX 及 BSD 等)上運行 Windows 套用的兼容層。另外英語單詞wine是葡萄酒的意思。 Wine (Wine Is Not an Emulator)[即Wine不是一個模擬器]是一個在Linux和UNIX之上的,Windows 3.x和 Windows APIs的實現。注意,Wine不是Windows模擬器,而是運用API轉換技術實做出Linux對應到Windows相對應的函式來調用DLL以運行Windows程式。Wine可以工作在絕大多數的UNIX版本下,包括Linux, FreeBSD, 和 Solaris。另外,也有適用於Mac OS X的Wine程式。 關於Wine的真正含義,有人對“Wine Is Not an Emulator”的說法表示質疑,認為”非模擬器“的解釋不過是一種娛樂性的說法,Wine的真實意思應當是是Windows Environment的縮寫,即WinE。

基本信息

版本

可提供下載的一共有三個版本:

Stable branch穩定版(推薦)
Development branch開發版
Staging branch發行版
版本版本類型發布日期開源實現DLL開源實現API
1.0 穩定版 2008-05-27 266個 45個
1.2 穩定版 2010-07-16 368個 58個
1.4 穩定版 2012-03-07 427個 74個
1.6 穩定版 2013-07-18 464個 79個
1.7 開發版 2013-08-02
1.9.17開發版2016-08-07
1.8.4穩定版2016-08-24
1.8.7發行版2017-02-28
2.3發行版2017-03-03
2.4發行版2017-03-17

其他版本

雖然可運行大部份視窗程式,但只能有限度地運行以DirectX所編寫的遊戲,亦即是很多遊戲不能在其運行

Wine的延伸計畫主要有兩大產品,一個是CodeWeavers開發的CrossOver,另一個是TransGaming Technologies的Cedega。

CrossOver Office以提供套用軟體支持為主,Cedega則鎖定在遊戲娛樂方面。CodeWeavers和Wine計畫一直保有密切的合作關係。CodeWeavers亦雇用了Alexandre Juillard以將CrossOver Office的原始碼回饋給Wine。在2005年6月22日,CodeWeavers 宣布支持基於英特爾處理器的蘋果電腦。

Transgaming的Cedega則是商業軟體,以Wine為基礎,在Wine更換授權後停止使用Wine的原始碼,雖然有Cedega提供原始碼下載(經由CVS),但在不包含專利技術的情形下,功能與可用性都不高。

早期發展

Wine計畫是在1993年由Bob Amstadt及Eric Youngdale發起的,最初的目的是為了使16位的視窗3.1的程式可以在Linux上運行,但現在已將目的變為使32位的視窗程式在Linux上運行。

Wine雖然是為Linux而制,但亦能支持FreeBSD、Mac OS X(Intel版) 與Solaris-x86。

因為Windows的DLLs是封閉原始碼的,所以程式設計師只能由最底層的設計開始,耗費大量的時間來編寫和測試,最後達至兼容。但這個過程往往會有很多困難,而且亦可能會出現很多錯誤。

當Corel參加這個計畫後,Wine很快便能兼容WordPerfect Office,但Corel後來停止了支持這個計畫。

編譯安裝

(所有Linux發行版適用)

確保你的Linux上已經安裝了gcc編譯器。

如果你安裝了編譯所需要的軟體(如 gcc flex bison fontforge ),就可以進行編譯了。

首先,訪問官方網站下載最新版本的 Wine,解壓到一個目錄

打開終端("Terminal"),輸入以下命令:

cd <你解壓的目錄> #進入目錄

即可完成 Wine 的編譯。

▲注意:

1.編譯Wine一般需要一個小時(視機器性能而定),若你是剛剛接觸 Linux 不久的人,最好不要進行編譯。

2.編譯安裝出現問題,多半是軟體依賴沒有安裝,請留意輸出的錯誤信息。

3. 建議能用軟體包(如.deb)安裝的就儘量別用源碼編譯安裝了,用軟體包安裝的可以通過包管理器進行版本管理,便於及時更新WIne,編譯安裝的就得靠你自己了(尤其是你裝了開發版本 (Development branch)的Wine,不及時更新可能會有很多bug)

下載安裝

若你使用 Debian 或者 Ubuntu 之類的發行版,只需要一個命令即可完成安裝:

sudo apt-get install wine

請注意:由這種方法安裝的Wine通常不是最新版本。要獲取最新版,請使用由官方網站上下載安裝包、添加ppa源(針對Ubuntu用戶)等方法或直接編譯安裝。

若你使用的為其他發行版,請訪問官方網站下載區查詢安裝方法

這裡介紹Wine官方給出的在Ubuntu環境下的安裝方法:

配置

安裝後在終端運行命令( 不需要root許可權)

運行後會讓你安裝一些必要外掛程式,確認即可。

wine[兼容層] wine[兼容層]

之後彈出的視窗裡面有詳盡的配置。

注意:Wine 1.1.27以上版本的 winecfg 已經是中文界面了。

最新版本的Wine已經可以模擬Windows 10的環境了

中文亂碼

Wine 1.1.4 以上版本的中文支持得到了極大改善。如果您在使用較低版本的WINE或者對WINE的中文支持不滿意,可以把下面文字保存為 zh.reg 檔案,運行 wine regedit 導入它即可

簡單方法

Wine可以在絕大多數的Unix/Linux版本下工作,但其現在仍不能完全運行所有的Windows程式。不過由於幾乎每個月都有新版本,越來越多的Windows程式已經能在Wine的幫助下在Linux中運行。

1、直接運行程式

使用命令 wine

2、使用程式管理器

啟動管理器視窗,從選單中選擇 檔案(F)-執行(X),就會彈出一個目錄瀏覽器,選擇程式即可。

3、直接雙擊 EXE 程式

一些發行版安裝WINE時會自動關聯EXE程式,這樣直接雙擊可以運行。

某些簡單程式可直接運行,而不需要安裝。大部分Windows軟體的安裝,請由Wine打開安裝包(exe檔案)然後和Windows下以同樣的方法安裝程式即可。這樣安裝的程式應當會在桌面環境的程式列表中自動添加捷徑(和Windows下的捷徑類似),選擇即可運行程式。

單擊右鍵,選擇打開方式也可以選擇Wine打開。

▲注意:Wine運行某些程式,如MS Office、迅雷、QQ、某些遊戲等的兼容性仍不完善。要正常使用此類軟體,可以以完全的虛擬機代替(如Virtualbox、VMWare),或者在網上搜尋查找已知的解決方法或針對特定軟體的安裝包。

可用性

可以做什麼

本文中,我們討論的是 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 用戶組非常活躍,會提供許多幫助,每周一次的 Wine 時事通訊(參閱 參考資料)是極好的信息資源。

Wine 中還沒有實現的 Win32 API

在 Wine 中,很多 Win32 API5 的函式是殘缺不全的。最常見的原因是,相當多的 Win32 API 並沒有被文檔化。這就意味著一個特別的應用程式可能會調用某個函式,而完全沒有關於此函式的可用資料。例如,我們在運行一個簡單的 RPC 程式時發現了 RtlAnsiCharToUnicodeChar 這個函式。在 MSDN 上的搜尋結果顯示沒有關於這個函式的資料,而且沒有關於所有 RtlXXXX 類別函式的資料。因此,如果它們在 Wine 中的實現對一些應用程式來說至關重要,那么人們可能只有去猜測它們的行為了。

相關詞條

熱門詞條

聯絡我們