Bagikan melalui


Fungsi MsiGetPropertyA (msiquery.h)

Fungsi MsiGetProperty mendapatkan nilai untuk properti alat penginstal.

Sintaks

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

Parameter

[in] hInstall

Tangani penginstalan yang disediakan untuk tindakan kustom DLL atau diperoleh melalui MsiOpenPackage, MsiOpenPackageEx, atau MsiOpenProduct.

[in] szName

String null-terminated yang menentukan nama properti .

[out] szValueBuf

Penunjuk ke buffer yang menerima string null yang dihentikan yang berisi nilai properti . Jangan mencoba menentukan ukuran buffer dengan meneruskan null (value=0) untuk szValueBuf. Anda bisa mendapatkan ukuran buffer dengan meneruskan string kosong (misalnya ""). Fungsi kemudian akan mengembalikan ERROR_MORE_DATA dan pchValueBuf akan berisi ukuran buffer yang diperlukan dalam TCHAR, tidak termasuk karakter null yang mengakhiri. Pada pengembalian ERROR_SUCCESS, pcchValueBuf berisi jumlah TCHAR yang ditulis ke buffer, tidak termasuk karakter null yang mengakhiri.

[in, out] pcchValueBuf

Penunjuk ke variabel yang menentukan ukuran, dalam TCHAR, dari buffer yang diacu oleh variabel szValueBuf. Ketika fungsi mengembalikan ERROR_SUCCESS, variabel ini berisi ukuran data yang disalin ke szValueBuf, tidak termasuk karakter null yang mengakhiri. Jika szValueBuf tidak cukup besar, fungsi mengembalikan ERROR_MORE_DATA dan menyimpan ukuran yang diperlukan, tidak termasuk karakter null yang mengakhiri, dalam variabel yang ditunjukkan oleh pchValueBuf.

Mengembalikan nilai

Fungsi ini mengembalikan UINT.

Keterangan

Jika nilai untuk properti yang diambil oleh fungsi MsiGetProperty tidak ditentukan, nilainya setara dengan nilai panjang 0. Ini bukan kesalahan.

Jika ERROR_MORE_DATA dikembalikan, parameter yang merupakan penunjuk memberikan ukuran buffer yang diperlukan untuk menahan string. Jika ERROR_SUCCESS dikembalikan, ia memberikan jumlah karakter yang ditulis ke buffer string. Oleh karena itu Anda bisa mendapatkan ukuran buffer dengan meneruskan string kosong (misalnya "") untuk parameter yang menentukan buffer. Jangan mencoba menentukan ukuran buffer dengan meneruskan Null (value=0).

Contoh berikut menunjukkan bagaimana tindakan kustom DLL dapat mengakses nilai properti dengan menentukan ukuran buffer nilai secara dinamis.

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;
}

Catatan

Header msiquery.h mendefinisikan MsiGetProperty sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Installer 5.0 di Windows Server 2012, Windows 8, Windows Server 2008 R2 atau Windows 7. Windows Installer 4.0 atau Windows Installer 4.5 di Windows Server 2008 atau Windows Vista. Pemasang Windows pada Windows Server 2003 atau Windows XP
Target Platform Windows
Header msiquery.h
Pustaka Msi.lib
DLL Msi.dll

Lihat juga

Fungsi Akses Status Alat Penginstal

Meneruskan Null sebagai Argumen Fungsi Pemasang Windows