次の方法で共有


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 文字を含まない、必要なバッファー サイズが JAR に含まれます。 ERROR_SUCCESSが返された場合、pcchValueBuf には、終端の null 文字を含まない、バッファーに書き込まれた TCHAR の数が含まれます。

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

必要条件

要件 価値
サポートされる最小クライアント 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 インストーラー
ターゲット プラットフォーム の ウィンドウズ
ヘッダー msiquery.h
ライブラリ Msi.lib
DLL Msi.dll

関連項目

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

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