Condividi tramite


Funzione MsiGetPropertyA (msiquery.h)

La funzione msiGetProperty ottiene il valore di una proprietà del programma di installazione.

Sintassi

UINT MsiGetPropertyA(
  [in]      MSIHANDLE hInstall,
  [in]      LPCSTR    szName,
  [out]     LPSTR     szValueBuf,
  [in, out] LPDWORD   pcchValueBuf
);

Parametri

[in] hInstall

Gestire l'installazione fornita a un'azione personalizzata DLL o ottenuta tramite MsiOpenPackage, MsiOpenPackageExo MsiOpenProduct.

[in] szName

Stringa con terminazione Null che specifica il nome della proprietà.

[out] szValueBuf

Puntatore al buffer che riceve la stringa con terminazione Null contenente il valore della proprietà . Non tentare di determinare le dimensioni del buffer passando un valore Null (value=0) per szValueBuf. È possibile ottenere le dimensioni del buffer passando una stringa vuota ,ad esempio "". La funzione restituirà quindi ERROR_MORE_DATA e pchValueBuf conterrà le dimensioni del buffer necessarie in TCHAR, senza includere il carattere Null di terminazione. In caso di restituzione di ERROR_SUCCESS, pcchValueBuf contiene il numero di TCHAR scritti nel buffer, senza includere il carattere Null di terminazione.

[in, out] pcchValueBuf

Puntatore alla variabile che specifica le dimensioni, in TCHAR, del buffer a cui punta la variabile szValueBuf. Quando la funzione restituisce ERROR_SUCCESS, questa variabile contiene le dimensioni dei dati copiati in szValueBuf, senza includere il carattere Null di terminazione. Se szValueBuf non è sufficientemente grande, la funzione restituisce ERROR_MORE_DATA e archivia le dimensioni necessarie, non includendo il carattere Null di terminazione, nella variabile a cui punta pchValueBuf.

Valore restituito

Questa funzione restituisce UINT.

Osservazioni

Se il valore della proprietà recuperato dalla funzione msiGetProperty non è definito, equivale a un valore di lunghezza 0. Non è un errore.

Se viene restituito ERROR_MORE_DATA, il parametro che è un puntatore restituisce le dimensioni del buffer necessario per contenere la stringa. Se viene restituito ERROR_SUCCESS, restituisce il numero di caratteri scritti nel buffer di stringa. È quindi possibile ottenere le dimensioni del buffer passando una stringa vuota (ad esempio "") per il parametro che specifica il buffer. Non tentare di determinare le dimensioni del buffer passando un valore Null (value=0).

Nell'esempio seguente viene illustrato come un'azione personalizzata dll possa accedere al valore di una proprietà determinando in modo dinamico le dimensioni del buffer dei valori.

UINT __stdcall MyCustomAction(MSIHANDLE hInstall)
{
    TCHAR* szValueBuf = NULL;
    DWORD cchValueBuf = 0;
    UINT uiStat =  MsiGetProperty(hInstall, TEXT("MyProperty"), TEXT(""), &cchValueBuf);
    //cchValueBuf now contains the size of the property's string, without null termination
    if (ERROR_MORE_DATA == uiStat)
    {
        ++cchValueBuf; // add 1 for null termination
        szValueBuf = new TCHAR[cchValueBuf];
        if (szValueBuf)
        {
            uiStat = MsiGetProperty(hInstall, TEXT("MyProperty"), szValueBuf, &cchValueBuf);
        }
    }
    if (ERROR_SUCCESS != uiStat)
    {
        if (szValueBuf != NULL) 
           delete[] szValueBuf;
        return ERROR_INSTALL_FAILURE;
    }

    // custom action uses MyProperty
    // ...

    delete[] szValueBuf;

    return ERROR_SUCCESS;
}

Nota

L'intestazione msiquery.h definisce MsiGetProperty 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 non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

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 in Windows Server 2003 o Windows XP
piattaforma di destinazione Finestre
intestazione msiquery.h
libreria Msi.lib
dll Msi.dll

Vedere anche

Funzioni di accesso allo stato del programma di installazione

passaggio di Null come argomento delle funzioni di Windows Installer