共用方式為


在 Windows XP、Windows Vista 和 Windows 7 中修補遊戲軟體

Windows Vista 和 Windows 7 有許多功能可讓作業系統更安全。 新增安全性表示將修補程式套用至軟體不像過去一樣簡單。 本文將探討一些在 Windows Vista 和 Windows 7 以及 Windows XP 中運作良好的修補方法。

有兩個主要類別的遊戲需要修補程式:

  • 只需要偶爾修補的遊戲,例如大部分的離線遊戲。
  • 需要頻繁修補程式的遊戲,例如大部分的線上遊戲。

本文也提供使用者帳戶控制 (UAC) 簡介,以作為開發人員預期 Windows Vista 和 Windows 7 中擁有許可權的背景。

使用者帳戶控制

Windows Vista 和 Windows 7 有兩種主要類型的使用者帳戶:標準使用者和系統管理員。 標準使用者帳戶有數個存取限制;例如,它無法將資料寫入 %SystemDrive%\Program Files 中的檔案系統,或寫入HKEY_LOCAL_MACHINE中的登錄。 如果修補程式安裝在唯讀位置,這會影響將修補程式套用至遊戲。 不同于 Windows XP,標準使用者帳戶在 Windows Vista 和 Windows 7 中更為常見。 作業系統的重要功能也需要標準使用者帳戶,例如家長監護。 家長監護要求子帳戶為標準使用者,並將這類帳戶提升為系統管理員,甚至一個遊戲都會防止家長監護使用所有其他遊戲。 因此,請務必為標準使用者設計遊戲。

Windows Vista 和 Windows 7 具有較新的使用者權限模型,可協助防止使用者執行嘗試執行使用者不想要或授權之作業的程式。 為此,使用者帳戶控制 (先前稱為最低許可權使用者帳戶或 LUA) 可讓使用者在大部分情況下以低階許可權操作電腦,同時能夠在必要時輕鬆執行需要較高層級許可權的應用程式。 這表示標準使用者帳戶和系統管理員帳戶都會使用標準使用者權限來執行應用程式,但只有系統管理員帳戶能夠將提高的許可權授與應用程式。 作業系統會要求具有系統管理員帳戶的使用者明確同意,再以提升許可權執行應用程式,而且如果需要系統管理員許可權的程式是在標準使用者帳戶上執行,系統就會提示系統管理員核准。

只需要偶爾修補的遊戲

有些遊戲在整個生命週期中只需要一些修補程式。 您可以針對此修補頻率採用的兩種方法是將修補程式散發為 Windows Installer 套件,這通常不需要系統管理員許可權,或使用一些直接修改遊戲檔案的其他類型的散發套件。

注意

無論遊戲是否需要頻繁修補,應用程式通常需要安裝或移除系統管理員許可權。

 

方法 1:針對偶爾的修補程式使用 Windows Installer

在此方法中,Windows Installer 是用來安裝套件 (.msi 檔案) ,而 Windows Installer 修補程式 (.msp 檔案) 會散發以安裝修補程式。 套件必須有 MsiPatchCertificate 資料表,而且修補程式必須由資料表中的憑證進行數位簽署。 如需數位簽章的詳細資訊,請參閱 遊戲開發人員的 Authenticode 簽署

如需使用此修補方法的詳細資料和需求,請參閱 Windows Installer 檔:

這個方法的缺點是,如果遊戲不是從 Windows XP 上的抽取式媒體安裝,則修補需要系統管理員許可權。 不過,這不太可能太嚴格,因為 Windows XP 上的大部分使用者系統管理員,以及從卸載式媒體安裝的軟體限制不會出現在 Windows Vista 上。

此方法的主要優點是,標準使用者帳戶可以套用修補程式,而不需要提示和驗證提高的許可權。 這可提供更佳的使用者體驗,因為若要進行遊戲,具有標準使用者帳戶的使用者不需要要求具有系統管理員帳戶的人員安裝修補程式,或提供具有永久系統管理員許可權的標準使用者帳戶。

此方法可能適用于需要頻繁修補程式的遊戲,但使用 Windows Installer 套件的額外負荷,就組建整合和支援大量檔案而言,可能會讓此方法比其他人更不想要。

方法 2:需要系統管理員許可權才能套用修補程式

在此方法中,套用修補程式的可執行檔需要系統管理員許可權才能執行。 使用系統管理員許可權,修補可執行檔可以直接修改位於 %SystemDrive%\Program Files 的遊戲檔案。

這個方法的優點是其簡單性。 不過,如果遊戲需要頻繁的修補程式,這個方法就不適合,因為如果具有標準使用者帳戶的使用者想要玩需要頻繁修補程式的遊戲,例如大量多玩家的線上遊戲,則該使用者有兩個選項:

  • 讓系統管理員登入並修補遊戲,這兩方可能不太方便。
  • 使用系統管理員許可權永久提高其帳戶。

注意

後者的解決方案不僅會降低整體系統的安全性,還能防止家長監護等重要功能運作。

 

實作此方法時,套用修補程式的可執行檔必須與遊戲可執行檔不同。 修補可執行檔的資訊清單應該指定 requestedExecutionLevel 的 requireAdministrator,以表示它為需要系統管理員許可權的應用程式。 如需如何執行這項操作的詳細資訊,請參閱「應用程式資訊清單架構 」中,適用于最低特殊許可權環境中的應用程式的開發人員最佳做法和指導方針

使用此方法時,即使在資訊清單中的設定中,可執行檔仍可能會在兩種情況下啟動,而沒有系統管理員許可權:

  • 如果作業系統是 Windows XP,且使用者帳戶是受限制的使用者。
  • 如果作業系統是 Windows Vista 或 Windows 7,則使用者帳戶是標準使用者,且 UAC 已停用。

這兩者都是罕見的取用者案例。 不過,修補程式應該具有資訊清單需要系統管理員許可權,而且應該呼叫 IsUserAnAdmin;如果此函式傳回 FALSE,則會顯示錯誤訊息「需要系統管理員許可權」。

整體而言,方法 1 對於在存留期內只需要一些修補程式的遊戲而言,最好是方法 1。

需要頻繁修補程式的遊戲

許多以網際網路為基礎的遊戲會持續改善,而且通常需要一般修補程式。 針對這些遊戲,修補程式可以套用每個使用者或每部電腦,如下列主題所述。 其他可能的解決方案包括改變 ACL 來保護 %SystemDrive%\Program Files 或建立自訂服務。

方法 3:安裝Per-User

其中一個建議且簡單的方法是將整個遊戲安裝到本機應用程式資料檔案夾的每位使用者子資料夾,您可以透過呼叫具有CSIDL_LOCAL_APPDATA的 SHGetFolderPath 來找到此資料夾。 範例路徑為 C:\Documents and Settings\user name\Local Settings\Application Data\ExampleGame。 這類位置可讓以標準使用者權限執行的應用程式直接修改遊戲檔案。

不過,當電腦有多個使用者時,此方法有一個缺點:每個使用者都已安裝遊戲複本,而且必須由每個使用者下載並套用修補程式。 這不僅浪費使用者的時間和磁碟空間,也會增加對提供修補程式的伺服器使用網路頻寬。 此外,因為任何具有標準使用者權限的應用程式都可以修改遊戲,所以遊戲可執行檔較不受到保護;由遊戲製造商決定是否可接受。

方法 4:安裝至通用Per-Computer位置

另一種方法是將非可執行檔遊戲資料安裝到 SHGetFolderPath 所指定路徑的子目錄CSIDL_COMMON_APPDATA;範例路徑為 C:\Documents and Settings\All Users\Application Data\ExampleGame。 這是所有使用者的共用位置,而且可由使用標準使用者許可權執行的應用程式修改。 這個方法可將遊戲從多個帳戶播放時重新套用大型修補程式的需求降到最低。 遊戲的可執行檔應該保留在 %SystemDrive%\Programs Files 中,以將系統上其他帳戶的風險降到最低。 可執行檔應該驗證共用目錄中新內容的完整性,因為該程式或具有標準使用者權限的人員可以修改該位置;請考慮使用 MapFileAndCheckSum 來計算檔案總和檢查碼。

此方法的優點是在 Windows XP 和 Windows Vista 上運作同樣良好,而且不需要系統管理員許可權。

其他可能性

在已經討論的方法之外,另一種可能性是在安裝遊戲時改變 %SystemDrive%\Program Files\Game Folder\ 的 ACL,如此一來,即使使用標準使用者權限執行,修補工具也可以直接寫入遊戲的檔案。 雖然這並不困難,但會略過系統提供給遊戲檔案的安全性保護,並提供惡意程式改變目錄內容的機會。 不建議這麼做,強烈建議改用替代方法。

最後一個可能性是撰寫自訂服務。 一般而言,撰寫自訂服務來修補遊戲並不好主意,因為這樣做很複雜且容易出錯。 建議您使用本文所討論的其他方法來修補。 不過,與反速查或反詐騙解決方案結合時,可能需要自訂服務。 這類服務應該支援大量的遊戲,並設計成隻下載修補程式檔案,並只寫入目標遊戲的安裝目錄。 服務必須很小、具有容易遭受攻擊的最小介面區,並在遊戲未執行時盡可能使用較少的系統資源。

摘要

最後,您決定要實作的方法。 您必須衡量因素對您而言很重要。 安全性、修補頻率、客戶容易使用的工作負載、實作所需的工作負載、解決方案的複雜度,以及平臺功能合規性是每個開發人員在決定特定方法之前必須考慮的因素。

您可以在使用者帳戶 控制 (UAC) 的 Windows Vista 應用程式開發需求 中找到使用者帳戶保護的詳細資訊。