共用方式為


MsiDeterminePatchSequenceW 函式 (msi.h)

MsiDeterminePatchSequence 函式會採用一組修補程式檔案、XML 檔案和 XML Blob,並判斷修補程式到指定已安裝產品的最佳應用程式順序。 此函式適用於已套用至產品的修補程式,以及已淘汰和已取代修補程式的帳戶。

語法

UINT MsiDeterminePatchSequenceW(
  [in]           LPCWSTR                szProductCode,
  [in, optional] LPCWSTR                szUserSid,
  [in]           MSIINSTALLCONTEXT      dwContext,
  [in]           DWORD                  cPatchInfo,
  [in]           PMSIPATCHSEQUENCEINFOW pPatchInfo
);

參數

[in] szProductCode

產品是修補程式集的目標。 此值必須是產品的 ProductCode GUID。

[in, optional] szUserSid

以 Null 結束的字串,指定使用者的安全性識別碼 (SID)。 此參數會限制此用戶帳戶的列舉內容。 此參數不能是特殊的 SID 字串 「S-1-1-0」 (所有人)或 “S-1-5-18” (本機系統)。 針對計算機內容 dwContext 設定為 MSIINSTALLCONTEXT_MACHINE,且 szUserSid 必須 NULL。 針對目前的使用者內容 szUserSid 可以是 null,而且 dwContext 可以設定為 MSIINSTALLCONTEXT_USERMANAGEDMSIINSTALLCONTEXT_USERUNMANAGED

[in] dwContext

將列舉限制為個別使用者非受控、個別使用者管理或每部計算機內容。 此參數可以是下列任一值。

內容類型 意義
MSIINSTALLCONTEXT_USERMANAGED
針對 s szUserSid 所指定使用者所指定之產品的所有個別使用者管理安裝,都會考慮修補程式。 具有此內容的 null szUserSid 表示目前的使用者。
MSIINSTALLCONTEXT_USERUNMANAGED
針對 szUserSid所指定之使用者的所有每個使用者非受控安裝,都會考慮修補程式。 具有此內容的 null szUserSid 表示目前的使用者。
MSIINSTALLCONTEXT_MACHINE
針對每部計算機安裝,會考慮修補程式。 當 dwContext 設定為 MSIINSTALLCONTEXT_MACHINE szUserSid 參數 必須是 null。

[in] cPatchInfo

數位列中的修補程式數目。

[in] pPatchInfo

MSIPATCHSEQUENCEINFO 結構的數位指標。

傳回值

MsiDeterminePatchSequence 函式會傳回下列值。

價值 意義
ERROR_FUNCTION_FAILED
函式失敗的方式未涵蓋於其他錯誤碼中。
ERROR_INVALID_PARAMETER
自變數無效。
ERROR_PATCH_NO_SEQUENCE
找不到一組修補程式的有效序列。
ERROR_INSTALL_PACKAGE_OPEN_FAILED
路徑所參考的安裝套件無法開啟。
ERROR_SUCCESS
修補程式已成功排序。
ERROR_FILE_NOT_FOUND
找不到 .msi 檔案。
ERROR_PATH_NOT_FOUND
找不到 .msi 檔案的路徑。
ERROR_INVALID_PATCH_XML
XML 修補程式數據無效。
ERROR_INSTALL_PACKAGE_INVALID
安裝套件無效。
ERROR_ACCESS_DENIED
不是系統管理員的使用者,嘗試以不同使用者的內容呼叫函式。
ERROR_BAD_CONFIGURATION
已註冊修補程式或產品的組態數據無效。
ERROR_UNKNOWN_PRODUCT
未註冊指定的 ProductCode GUID。
ERROR_FUNCTION_NOT_CALLED
需要 Windows Installer 3.0 版才能判斷最佳修補程式順序。 函式是以 szProductCode 呼叫, 尚未隨 Windows Installer 3.0 版一起安裝。
ERROR_CALL_NOT_IMPLEMENTED
如果函式是從 自定義動作 呼叫,或未安裝 MSXML 3.0,則可能會傳回此錯誤。
ERROR_UNKNOWN_PATCH
指定的修補程式未知。

言論

沒有系統管理員許可權的使用者只能在自己的或計算機內容中呼叫此函式。 系統管理員的使用者可以為其他使用者呼叫它。

如果從自訂動作呼叫此函式,則會失敗並傳回 ERROR_CALL_NOT_IMPLEMENTED。 此函式需要 MSXML 3.0 版來處理 XML,並在未安裝 MSXML 3.0 時傳回 ERROR_CALL_NOT_IMPLEMENTED

MsiDeterminePatchSequence 函式會設定 pPatchInfo所 指向的每個 MSIPATCHSEQUENCEINFO 結構 uStatusdwOrder 成員。 每個結構都包含特定修補程式的相關信息。

如果函式成功,MSIPATCHSEQUENCEINFO 可套用至產品的每個修補程式結構都會傳回 uStatusERROR_SUCCESS,以及 dwOrder 大於或等於零。 dwOrder 的值 大於或等於零,表示修補程式從零開始的最佳應用程式順序。

如果函式成功,則從最佳修補序列中排除的修補程式會傳回 MSIPATCHSEQUENCEINFO 結構,且 dwOrder 等於 -1。 在這些情況下,uStatus 欄位 ERROR_SUCCESS 表示已淘汰或取代產品的修補程式。 ERROR_PATCH_TARGET_NOT_FOUND 的 [uStatus] 字段表示無法套用至產品的修補程式。

如果函式失敗,則每個修補程式 MSIPATCHSEQUENCEINFO 結構都會傳回等於 -1 的 dwOrder。 在此情況下,uStatus 欄位可能包含錯誤,其中包含個別修補程式的詳細資訊。 例如,會針對具有迴圈排序資訊的修補程式傳回 ERROR_PATCH_NO_SEQUENCE

注意

msi.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiDeterminePatchSequence 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 如需 Windows Installer 版本所需的最低 Windows Service Pack 相關信息,請參閱 Windows Installer Run-Time 需求。
目標平臺 窗戶
標頭 msi.h
連結庫 Msi.lib
DLL Msi.dll

另請參閱

MSIPATCHSEQUENCEINFO

MsiDetermineApplicablePatches

Windows Installer 2.0 和更早版本中不支援

ProductCode