msiGetComponentPathExA 函式 (msi.h)

MsiGetComponentPathEx 函式會傳回已安裝元件的完整路徑。 如果元件的機碼路徑是登錄機碼,則函式會傳回登錄機碼。

此函式會擴充現有的 MsiGetComponentPath 函式,以啟用跨使用者帳戶和安裝內容的搜尋元件。

語法

INSTALLSTATE MsiGetComponentPathExA(
  [in]                LPCSTR            szProductCode,
  [in]                LPCSTR            szComponentCode,
  [in, optional]      LPCSTR            szUserSid,
  [in, optional]      MSIINSTALLCONTEXT dwContext,
  [out, optional]     LPSTR             lpOutPathBuffer,
  [in, out, optional] LPDWORD           pcchOutPathBuffer
);

參數

[in] szProductCode

以 Null 終止的字串值,指定應用程式的產品代碼 GUID。 函式會取得此應用程式所使用的已安裝元件路徑。

[in] szComponentCode

指定元件程式代碼 GUID 的 Null 終止字串值。 函式會取得具有此元件程式代碼的已安裝元件路徑。

[in, optional] szUserSid

以 Null 終止的字串值,指定系統中使用者的安全性識別碼 (SID) 。 函式會取得此 SID 所識別使用者帳戶下所安裝之應用程式的已安裝元件路徑。 特殊 SID 字串 s-1-1-0 (Everyone) 會指定系統中的所有使用者。 如果此參數為 NULL,則函式只會取得目前登入使用者的已安裝元件路徑。

SID 類型 意義
NULL
指定目前登入的使用者。
使用者 SID
指定系統中的特定使用者。 使用者 SID 的範例為 「S-1-3-64-2415071341-1358098788-3127455600-2561」。。
s-1-1-0
指定系統中的所有使用者。
 
注意 特殊 SID 字串 s-1-5-18 (系統) 無法用來搜尋安裝在每部電腦安裝內容中的應用程式。 將 SID 值設定為 s-1-5-18 會 傳回ERROR_INVALID_PARAMETER。 當 dwContext 設定為僅MSIINSTALLCONTEXT_MACHINE時, szUserSid 必須為 NULL
 

[in, optional] dwContext

指定安裝內容的旗標。 函式會取得在指定安裝內容中安裝之應用程式的已安裝元件路徑。 此參數可以是下列值的組合。

Context 意義
MSIINSTALLCONTEXT_USERMANAGED
1
包含安裝在個別使用者管理安裝內容中的應用程式。
MSIINSTALLCONTEXT_USERUNMANAGED
2
包含安裝在個別使用者-Unmanaged 安裝內容中的應用程式。
MSIINSTALLCONTEXT_MACHINE
4
包含安裝在每部電腦安裝內容中的應用程式。 當 dwInstallContext 設定為 僅MSIINSTALLCONTEXT_MACHINE 時, szUserSID 參數必須是 NULL

[out, optional] lpOutPathBuffer

接收元件路徑的字串值。 此參數可以是 Null。 如果元件是登錄機碼,則會以數值方式表示登錄根目錄。 如果這是登錄子機碼路徑,索引鍵路徑結尾會有反斜杠。 如果這是登錄值機碼路徑,則結尾沒有反斜杠。 例如, HKEY_CURRENT_USER\SOFTWARE\Microsoft 32 位操作系統上的登錄路徑會傳回為 “01:\SOFTWARE\Microsoft”。 在 32 位作業系統上傳回的登錄根目錄定義如下表所示。

注意 在 64 位作業系統上,值 20 會新增至此數據表中的數值登錄根目錄,以區別它們與 32 位操作系統上的登錄機碼路徑。 例如,如果元件路徑是64位操作系統上的登錄機碼,HKEY_CURRENT_USER\SOFTWARE\Microsoft 會傳回為 “21:\SOFTWARE\Microsoft\”。
 
根目錄 意義
HKEY_CLASSES_ROOT
00
HKEY_CURRENT_USER
01
HKEY_LOCAL_MACHINE
02
HKEY_USERS
03

[in, out, optional] pcchOutPathBuffer

接收 TCHAR 中由 szPathBuf 參數所指向之緩衝區大小的位置指標。 這個位置中的值應該設定為字串中的 TCHAR 計數,包括終止的 Null 字元。 如果緩衝區的大小太小,此參數會接收字串值的長度,而不包含計數中的終止 Null 字元。

傳回值

MsiGetComponentPathEx 函式會傳回下列值。

意義
INSTALLSTATE_NOTUSED
正在要求的元件已在計算機上停用。
INSTALLSTATE_BADCONFIG
設定數據已損毀。
INSTALLSTATE_ABSENT
未安裝元件。
INSTALLSTATE_INVALIDARG
其中一個函式參數無效。
INSTALLSTATE_LOCAL
元件會安裝在本機。
INSTALLSTATE_SOURCE
元件會安裝為從來源執行。
INSTALLSTATE_SOURCEABSENT
元件來源無法存取。
INSTALLSTATE_UNKNOWN
產品名稱或元件識別碼未知。
INSTALLSTATE_BROKEN
元件以某種方式損毀或部分遺失,而且需要修復。

備註

MsiGetComponentPathEx 函式可能會傳回INSTALLSTATE_ABSENTINSTALL_STATE_UNKNOWN,原因如下:

  • INSTALLSTATE_ABSENT

    應用程式未正確確保此功能是藉由呼叫 MsiUseFeature 來安裝,並視需要 安裝 MsiConfigureFeature

  • INSTALLSTATE_UNKNOWN

    此功能未發佈。 應用程式應該先呼叫 MsiQueryFeatureStateMsiEnumFeatures 來判斷此情況。 應用程式會在初始化時進行這些呼叫。 應用程式應該只使用已知已發佈的功能。 由於 msiUseFeature 也應該傳回INSTALLSTATE_UNKNOWN,因此未呼叫 MsiUseFeature 或其傳回值未正確檢查。

注意

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

規格需求

需求
最低支援的用戶端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 如需 Windows Installer 版本所需的最低 Windows Service Pack 相關信息,請參閱 Windows Installer Run-Time 需求。
目標平台 Windows
標頭 msi.h
程式庫 Msi.lib
Dll Msi.dll

另請參閱

元件特定函式