讓.NET 8 支援 Windows Vista RTM

张善友發表於2024-05-05

眾所周知,從 Windows 的每次更新又會新增大量 API,這使得相容不同版本的 Windows 需要花費很大精力。導致現在大量開源專案已經不再相容一些早期的 Windows 版本,比如 .NET 8 AOT編譯命令列程式時生成的EXE,依賴以下三個函式,經查只有Windows 7 SP1以上系統才包含,具體參見:讓.NET 8 支援 Windows Vista RTM · Issue #66 · Chuyu-Team/YY-Thunks (github.com)

YY-Thunks(https://github.com/Chuyu-Team/YY-Thunks)是一個採用MIT許可證的開源專案,旨在解決Windows XP RTM版本無法定位程式輸入點的問題,例如DecodePointer、EncodePointer、RegDeleteKeyEx等。這個專案透過使用LoadLibraryGetProcAddress動態載入API,並在API不存在時提供補償措施,模擬原始API的行為,從而讓程式能在舊版本的Windows上正常執行。YY-Thunks的特點包括快速、安全,支援多種編譯器和執行庫模式。可以透過NuGet包管理器或手工配置的方式整合到專案中。

YY-Thunks最新發布的v1.0.10-Beta3 包含了對.NET 8 的Native AOT的支援。

image

YY-Thunks 透過動態載入和模擬這些函式的行為,使得在舊版 Windows 上執行的程式能夠呼叫這些函式,即使它們的系統庫中沒有直接提供這些函式。這樣,開發者可以繼續使用現代程式設計實踐和 API,同時保持對舊作業系統的相容性。

為了確保您的專案相容性,您應該檢視 YY-Thunks 的官方文件或原始碼,以獲取最新的支援列表和整合指南。由於 API 支援可能會隨著 YY-Thunks 的更新而變化,直接檢視專案的最新資訊是最準確的做法。

相關文章