使用 64 位 Windows Installer 套件
當您建立 64 位 Windows Installer 套件 或呼叫 Windows Installer 的應用程式來安裝 64 位套件時,請執行下列動作:
- 使用 200 或更高版本的 Windows Installer 資料庫架構。 指定 2.0 版是安裝套件所需的最低安裝程式版本,方法是將 [頁面計數摘要 ] 屬性設定為整數 200。 舊版 Windows Installer 會拒絕安裝 64 位套件的嘗試。 針對 Arm64 平臺上的 64 位套件,Windows Installer 資料庫架構必須是 500 或更新版本。
- 在封裝摘要資訊資料流程的 [範本摘要] 屬性中指出,這是 64 位套件。 如果要在 Intel64 處理器上執行封裝,請在 [範本摘要 ] 屬性的平臺欄位中輸入 「Intel64」。 如果要在 64 位擴充處理器上執行封裝,請輸入 「x64」。 如果要在 Arm64 處理器上執行套件,請輸入 「Arm64」。 套件無法標示為同時支援 Intel64 和 x64 平臺,「Intel64,x64」 的 範本摘要 屬性值無效。 封裝無法標示為同時支援 32 位和 64 位平臺,「Intel,x64」 或 「Intel,Intel64」 的 範本摘要 屬性值無效。
- 在[元件] 資料表的 [屬性] 資料行中設定msidbComponentAttributes64 位,以識別每個 64 位元件。
- 使用選擇性條件陳述式,藉由參考 VersionNT64 屬性來檢查 64 位作業系統的版本。 Windows Installer 會將此屬性設定為 64 位 Windows 版本,如果作業系統不是 64 位 Windows,則會將 VersionNT64 保持未定義。 如需詳細資訊,請參閱 在條件陳述式中使用屬性。
- 使用選擇性條件陳述式,藉由參考 Intel64 或 Msix64 屬性來檢查電腦的數值處理器層級。 Windows Installer 會將這些屬性設定為電腦的目前數值處理器層級,如果這不是 Itanium 處理器, 則會將 Intel64 屬性保留為未定義。 如需詳細資訊,請參閱 在條件陳述式中使用屬性。
- 使用 AppSearch 資料表 和 AppSearch 動作 ,針對現有的 64 位元件執行登錄的選擇性搜尋。 若要搜尋現有的 64 位元件,請在RegLocator 資料表的 Type 資料行中包含msidbLocatorType64 位位。 如需詳細資訊,請參閱 搜尋現有的應用程式、檔案、登錄專案或.ini檔案專案屬性
- 參考 64 位資料夾的 System64Folder屬性、 ProgramFiles64Folder 屬性和 CommonFiles64Folder 屬性,以及 32 位資料夾的 SystemFolder 屬性、 ProgramFilesFolder 屬性和 CommonFilesFolder 屬性,以取得系統資料夾的路徑。
- 在參考 64 位元件時,請確認應用程式使用正確的 GUID。 如果有 32 位和 64 位版本的特定元件,這些元件應該有不同的元件識別碼 GUID。
- 判斷安裝 64 位應用程式時,是否需要定義任何新的環境變數。
- 如果要安裝 64 位 ODBC 驅動程式管理員,則攜帶它的元件應該命名為 ODBCDriverManager64。 ODBC 驅動程式管理員必須在安裝程式套件中撰寫,而且必須包含名為 ODBCDriverManager64 的元件。 如有必要,將會安裝管理員。
- 確認應用程式只會呼叫以可執行檔身分執行的 32 位服務。 應用程式不應該呼叫在 DLL 中執行的 32 位服務。
- 如果應用程式安裝並存 32 位和 64 位版本的元件,請確認應用程式已正確共用.ini檔案資訊。
- 確認應用程式只會將 32 位修補程式套用至 32 位二進位檔,並將 64 位修補程式套用至 64 位二進位檔。
- 請考慮 32 位和 64 位版本的未來升級案例,並維護升級程式碼。 如需詳細資訊,請參閱 修補和升級。
- 使用 啟動載入 應用程式來安裝 64 位 Windows Installer 套件時,請將啟動載入應用程式編譯為 64 位應用程式。
- 若要停用受特定元件影響的登錄機碼登錄反映,請在[元件] 資料表的 [屬性] 欄位中設定msidbComponentAttributesDisableRegistryReflection位。 這可能需要有 32 位和 64 位的相同應用程式複本並存。 如果設定此位,Windows Installer 會在元件所存取的每個索引鍵上呼叫 RegDisableReflectionKey 函 式。 此位適用于 Windows Installer 4.0 版。 32 位系統上會忽略此位。 Windows XP 和 Windows 2000 的 64 位版本會忽略此位。
注意
MsiGetComponentPath函式的lpPathBuf參數所傳回的數值登錄根目錄值會區分 32 位和 64 位作業系統上的元件。 如需詳細資訊,請參閱 MsiGetComponentPath 函式。
相關主題