MsiGetPropertyA 関数 (msiquery.h)

MsiGetProperty 関数は、インストーラー プロパティの値を取得します。

構文

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

パラメーター

[in] hInstall

DLL カスタム アクションに対して提供されるインストール、または MsiOpenPackage、MsiOpenPackageEx、または MsiOpenProduct を使用して取得されたインストールを処理します。

[in] szName

プロパティの名前を指定する null で終わる文字列。

[out] szValueBuf

プロパティの値を含む null で終わる文字列を受け取るバッファーへのポインター。 szValueBuf に null (値=0) を渡してバッファーのサイズを判断しないでください。 バッファーのサイズを取得するには、空の文字列 (""など) を渡します。 その後、関数は ERROR_MORE_DATAを返し、 pchValueBuf には、終端の null 文字を含めず、TCHAR に必要なバッファー サイズが含まれます。 ERROR_SUCCESSが返された場合、 pcchValueBuf にはバッファーに書き込まれた TCHAR の数が含まれ、終端の null 文字は含まれません。

[in, out] pcchValueBuf

変数 szValueBuf が指すバッファーのサイズを TCHAR で指定する変数へのポインター。 関数が ERROR_SUCCESSを返すとき、この変数には 、szValueBuf にコピーされたデータのサイズが含まれます。終端の null 文字は含まれません。 szValueBuf が十分な大きさでない場合、関数は ERROR_MORE_DATAを返し、pchValueBuf が指す変数に、終端の null 文字を含まない必要なサイズを格納します。

戻り値

この関数は UINT を返します。

注釈

MsiGetProperty 関数によって取得されるプロパティの値が定義されていない場合は、長さが 0 の値と同じです。 これは、エラーではありません。

ERROR_MORE_DATAが返された場合、ポインターである パラメーターは、文字列を保持するために必要なバッファーのサイズを指定します。 ERROR_SUCCESSが返された場合、文字列バッファーに書き込まれた文字数が返されます。 そのため、バッファーを指定するパラメーターに空の文字列 (""など) を渡すことで、バッファーのサイズを取得できます。 Null (値=0) を渡してバッファーのサイズを判断しないでください。

次の例は、DLL カスタム アクションが値バッファーのサイズを動的に決定することによってプロパティの値にアクセスする方法を示しています。

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

注意

msiquery.h ヘッダーは、MSIGetProperty をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー
対象プラットフォーム Windows
ヘッダー msiquery.h
Library Msi.lib
[DLL] Msi.dll

こちらもご覧ください

インストーラーの状態アクセス関数

Windows インストーラー関数の引数として Null を渡す