Condividi tramite


Funzione MsiEnumProductsExA (msi.h)

La funzione MsiEnumProductsEx enumera una o tutte le istanze di prodotti attualmente annunciati o installati nei contesti specificati. Questa funzione sostituisce MsiEnumProducts.

Sintassi

UINT MsiEnumProductsExA(
  [in, optional]      LPCSTR            szProductCode,
  [in]                LPCSTR            szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwIndex,
  [out, optional]     CHAR [39]         szInstalledProductCode,
  [out, optional]     MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional]     LPSTR             szSid,
  [in, out, optional] LPDWORD           pcchSid
);

Parametri

[in, optional] szProductCode

Productcode GUID del prodotto da enumerare. Vengono enumerate solo istanze di prodotti nell'ambito del contesto specificato dai parametri szUserSid e dwContext . Questo parametro può essere impostato su NULL per enumerare tutti i prodotti nel contesto specificato.

[in] szUserSid

Stringa con terminazione Null che specifica un SID (Security Identifier) che limita il contesto dell'enumerazione. La speciale stringa SID s-1-1-0 (Everyone) specifica l'enumerazione in tutti gli utenti del sistema. Un valore SID diverso da s-1-1-0 viene considerato un SID utente e limita l'enumerazione all'utente corrente o a qualsiasi utente nel sistema. Questo parametro può essere impostato su NULL per limitare l'ambito di enumerazione all'utente corrente.

Tipo SID Significato
NULL
Specifica l'utente attualmente connesso.
SID utente
Specifica l'enumerazione per un determinato utente nel sistema. Un esempio di SID utente è "S-1-3-64-2415071341-1358098788-3127455600-2561".
s-1-1-0
Specifica l'enumerazione in tutti gli utenti del sistema.
 
Nota Non è possibile usare la speciale stringa SID s-1-5-18 (System) per enumerare prodotti o patch installati in base al computer. Quando dwContext è impostato solo su MSIINSTALLCONTEXT_MACHINE, szUserSid deve essere NULL.
 

[in] dwContext

Limita l'enumerazione a un contesto. Questo parametro può essere una o una combinazione dei valori illustrati nella tabella seguente.

Contesto Significato
MSIINSTALLCONTEXT_USERMANAGED
Enumerazione estesa a tutte le installazioni gestite per utente per gli utenti specificati da szUserSid. Un SID non valido non restituisce alcun elemento.
MSIINSTALLCONTEXT_USERUNMANAGED
Enumerazione estesa a tutte le installazioni per utente e non gestite per gli utenti specificati da szUserSid. Un SID non valido non restituisce alcun elemento.
MSIINSTALLCONTEXT_MACHINE
Enumerazione estesa a tutte le installazioni per computer. Quando dwInstallContext è impostato solo su MSIINSTALLCONTEXT_MACHINE, il parametro szUserSID deve essere NULL.

[in] dwIndex

Specifica l'indice del prodotto da recuperare. Questo parametro deve essere zero per la prima chiamata alla funzione MsiEnumProductsEx e quindi incrementato per le chiamate successive. L'indice deve essere incrementato, solo se la chiamata precedente ha restituito ERROR_SUCCESS. Poiché i prodotti non sono ordinati, qualsiasi nuovo prodotto ha un indice arbitrario. Ciò significa che la funzione può restituire prodotti in qualsiasi ordine.

[out, optional] szInstalledProductCode

Stringa con terminazione Null di TCHAR che fornisce il GUID ProductCode dell'istanza del prodotto da enumerare. Questo parametro può essere NULL.

[out, optional] pdwInstalledContext

Restituisce il contesto dell'istanza del prodotto da enumerare. Il valore di output può essere MSIINSTALLCONTEXT_USERMANAGED, MSIINSTALLCONTEXT_USERUNMANAGED o MSIINSTALLCONTEXT_MACHINE. Questo parametro può essere NULL.

[out, optional] szSid

Buffer di output che riceve il SID stringa dell'account in cui è presente questa istanza del prodotto. Questo buffer restituisce una stringa vuota per un'istanza installata in un contesto per computer.

Questo buffer deve essere sufficientemente grande da contenere il SID. Se il buffer è troppo piccolo, la funzione restituisce ERROR_MORE_DATA e imposta *pcchSid sul numero di TCHAR nel SID, senza includere il carattere NULL di terminazione.

Se szSid è impostato su NULL e pcchSid è impostato su un puntatore valido, la funzione restituisce ERROR_SUCCESS e imposta *pcchSid sul numero di TCHAR nel valore, senza includere il valore NULL di terminazione. La funzione può quindi essere chiamata di nuovo per recuperare il valore, con il buffer szSid sufficientemente grande da contenere *pcchSid + 1 caratteri.

Se szSid e pcchSid sono entrambi impostati su NULL, la funzione restituisce ERROR_SUCCESS se il valore esiste, senza recuperare il valore.

[in, out, optional] pcchSid

Quando si chiama la funzione, questo parametro deve essere un puntatore a una variabile che specifica il numero di TCHAR nel buffer szSid . Quando la funzione viene restituita, questo parametro viene impostato sulle dimensioni del valore richiesto indipendentemente dal fatto che la funzione copia il valore nel buffer specificato. La dimensione viene restituita come numero di TCHAR nel valore richiesto, senza includere il carattere Null di terminazione.

Questo parametro può essere impostato su NULL solo se szSid è null, altrimenti la funzione restituisce ERROR_INVALID_PARAMETER.

Valore restituito

La funzione MsiEnumProductsEx restituisce uno dei valori seguenti.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
Se l'ambito include utenti diversi dall'utente corrente, sono necessari privilegi di amministratore.
ERROR_BAD_CONFIGURATION
I dati di configurazione sono danneggiati.
ERROR_INVALID_PARAMETER
Alla funzione è stato passato un parametro non valido.
ERROR_NO_MORE_ITEMS
Non ci sono più prodotti da enumerare.
ERROR_SUCCESS
Viene enumerato un prodotto.
ERROR_MORE_DATA
Il parametro szSid è troppo piccolo per ottenere il SID utente.
ERROR_UNKNOWN_PRODUCT
Il prodotto non è installato nel computer nel contesto specificato.
ERROR_FUNCTION_FAILED
Errore interno imprevisto.

Commenti

Per enumerare i prodotti, un'applicazione deve inizialmente chiamare la funzione MsiEnumProductsEx con il parametro iIndex impostato su zero. L'applicazione deve quindi incrementare il parametro iProductIndex e chiamare MsiEnumProductsEx fino a quando non restituisce ERROR_NO_MORE_ITEMS e non sono più prodotti da enumerare.

Quando si effettuano più chiamate a MsiEnumProductsEx per enumerare tutti i prodotti, ogni chiamata deve essere eseguita dallo stesso thread.

Un utente deve disporre dei privilegi di amministratore per enumerare i prodotti in tutti gli account utente o in un account utente diverso dall'account utente corrente. L'enumerazione ignora i prodotti annunciati solo (ad esempio i prodotti non installati) nel contesto non gestito per utente durante l'enumerazione in tutti gli utenti o un utente diverso dall'utente corrente.

Usare MsiGetProductInfoEx per ottenere lo stato o altre informazioni su ogni istanza del prodotto enumerata da MsiEnumProductsEx.

Nota

L'intestazione msi.h definisce MsiEnumProductsEx come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

Requisito Valore
Client minimo supportato Windows Installer 5.0 in Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 in Windows Server 2008 o Windows Vista. Windows Installer 3.0 o versione successiva in Windows Server 2003 o Windows XP. Per informazioni sul Service Pack minimo di Windows richiesto da una versione di Windows Installer, vedere Windows Installer Run-Time Requirements .See the Windows Installer requirements for information about the minimum Windows Service Pack that is required by a Windows Installer version.
Piattaforma di destinazione Windows
Intestazione msi.h
Libreria Msi.lib
DLL Msi.dll

Vedi anche

MsiEnumProducts

Non supportato in Windows Installer 2.0 e versioni precedenti

ProductCode

Rimozione di patch