作者:吳祐賓
Delphi XE 下熬了很久,就在 2023 年正式升級 Delphi 11 後,才由原本「修理 IDE 的快樂」轉變為「升級後的快樂」,然而這快樂沒有多久,很快的使用者就傳來災情:
無法執行
依稀記得幾年前的 Delphi 研討會有提到新版 Delphi 產出的執行檔無法在 Windows XP 下執行,想不到在 2023 年的今天,仍然會遇到必須要使用 Windows XP 的場合,2001年10月的產物。
難怪每次購買新版 Delphi 時都能下載過往舊版本,是時候再把 Delphi XE 拿出來把玩了!
你也是這樣想嗎?太天真了。Delphi 11 已經貼心的在編譯器設定裡加入了【PE Header】選項!
PE Header 是什麼,為什麼要設定?
PE 為 Portable Executable 可攜式執行檔的縮寫,目的是告訴 Windows 此執行檔最小可執行的系統版本,讓系統在運行你的程式前,檢查作業系統版本是否符合要求。
設定 PE Header 的目的是在每個系統版本都有自己的 API,若使用到新系統才有的 API,那在舊系統下就會出現無法預期的錯誤,避免發生無法預期的異常,限定最小可執行系統是有需要的。
OS Version 的對應是?
將維基百科的資料整理後得到如下表格:
名稱 | 發行版本 |
---|---|
Windows 11 | NT 10.0 |
Windows 10 | NT 10.0 |
Windows 8.1 | NT 6.3 |
Windows 8 | NT 6.2 |
Windows 7 | NT 6.1 |
Windows Vista | NT 6.0 |
Windows XP 專業版 x64 | NT 5.2 |
Windows XP | NT 5.1 |
Windows ME | NT 4.9 |
Windows 2000 | NT 5.0 |
由上表可知,Delphi 11 編譯器預設相容最小系統是 Windows Vista。
如何設定相容 Windows XP
Project > Options > Building > Linking 底下兩個項目:
- Set OS version fields in PE header as <major>.<minor>
- Set subsystem version fields in PE header as <major>.<minor>
設定為發行版本的系統,以 Windows XP 為例就是 5.1。
當然,你也可以使用編譯指令「{$SETPEOSVERSION 5.1}」,並且放在 .dpr 檔案的開頭,就在 program 關鍵字之後,但在 uses 區段之前。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | program Project1; {$SETPEOSVERSION 5.1} uses Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end. |
設定後就可以在 Windows XP 下順利運行。
結論
透過精確的 PE Header 設定,我們成功讓 Delphi 11 的執行檔在 Windows XP 上順利執行。這項解決方案再次證明 Delphi 11 能夠有效提升開發效率。讓我們將重點放在解決問題上,提供確切的步驟和指引,讓讀者能夠迅速實現目標。
在開發軟體時,我們經常面臨不同的系統環境和需求。透過了解並應用 PE Header 的概念,我們可以確保我們的程式在特定的操作系統上順利執行。這種實用性的思維和目的導向的方法,使我們能夠有效地解決問題,並為使用者提供優質的使用體驗。
謹記,在軟體開發的旅程中,不斷學習和適應新技術是至關重要的。同時,我們也應該牢記舊有系統的需求,並提供相容性解決方案,以確保我們的軟體在廣泛的環境中得以運行。
最後,如果你想深入了解更多關於軟體開發的知識和技巧,邀請你關注作者的最新書籍更新。這將是一個超棒的機會,繼續提升你的開發技能,並受益於此書的專業知識和經驗。
讓我們繼續以實用性和效率為導向,不斷進步並創造出更好的軟體體驗!
沒有留言:
張貼留言