MsiGetPropertyA 関数 (msiquery.h)
MsiGetProperty 関数は、インストーラー プロパティの値を取得します。
構文
UINT MsiGetPropertyA(
[in] MSIHANDLE hInstall,
[in] LPCSTR szName,
[out] LPSTR szValueBuf,
[in, out] LPDWORD pcchValueBuf
);
パラメーター
[in] hInstall
DLL カスタム アクションに提供されるインストール、または MsiOpenPackage、
[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 単位で指定する変数
戻り値
この関数は 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 |