MsiGetTargetPathA 函数 (msiquery.h)

MsiGetTargetPath 函数返回目录表中文件夹的完整目标路径。

语法

UINT MsiGetTargetPathA(
  [in]      MSIHANDLE hInstall,
  [in]      LPCSTR    szFolder,
  [out]     LPSTR     szPathBuf,
  [in, out] LPDWORD   pcchPathBuf
);

parameters

[in] hInstall

提供给 DLL 自定义操作或通过 MsiOpenPackage、MsiOpenPackageExMsiOpenProduct 获取的安装的句柄。

[in] szFolder

一个以 null 结尾的字符串,指定 目录表的记录。 如果目录是根目录,则可以是 DefaultDir 列中的值。 否则,它必须是“目录”列中的值。

[out] szPathBuf

指向接收 null 终止的完整目标路径的缓冲区的指针。 请勿尝试通过为 szPathBuf 传入 null (value=0) 来确定缓冲区的大小。 可以通过传入空字符串 ((例如“”) )来获取缓冲区的大小。 然后,该函数返回ERROR_MORE_DATA并且 pcchPathBuf 包含所需的缓冲区大小(不包括终止 null 字符)。 返回ERROR_SUCCESS时, pcchPathBuf 包含写入缓冲区的 TCHAR 数,不包括终止 null 字符。

[in, out] pcchPathBuf

指向变量的指针,该变量指定变量 szPathBuf 指向的缓冲区的大小(以 TCHAR 为单位),当函数返回ERROR_SUCCESS时,此变量包含复制到 szPathBuf 的数据的大小,不包括终止 null 字符。 如果 szPathBuf 不够大,则该函数将返回ERROR_MORE_DATA并将所需的大小(不包括终止 null 字符)存储在 pcchPathBuf 指向的变量中。

返回值

MsiGetTargetPath 函数返回以下值:

注解

如果返回ERROR_MORE_DATA,则指针参数会提供保存字符串所需的缓冲区大小。 如果返回ERROR_SUCCESS,则会提供写入字符串缓冲区的字符数。 因此,可以通过传入空字符串 (例如指定缓冲区的参数的“”) 来获取缓冲区的大小。 请勿尝试通过传入 Null (value=0) 来确定缓冲区的大小。

在调用此函数之前,安装程序必须先运行 CostInitialize 操作FileCost 操作CostFinalize 操作。 有关详细信息,请参阅 从程序调用数据库函数

如果目标的当前位置不适用于安装,MsiGetTargetPath 将返回在包中创作的目标目录的默认路径。 例如,如果在 维护安装 期间网络位置的目标目录不可用,安装程序会将目标目录路径重置回默认值。 若要获取本例中目标目录的实际路径,请调用 MsiProvideComponent ,该组件之前已安装到搜索的目录中,并将 dwInstallMode 设置为 INSTALLMODE_NODETECTION。

有关详细信息,请参阅 从程序调用数据库函数

如果函数失败,可以使用 MsiGetLastErrorRecord 获取扩展错误信息。

注意

msiquery.h 标头将 MsiGetTargetPath 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer
目标平台 Windows
标头 msiquery.h
Library Msi.lib
DLL Msi.dll

请参阅

安装程序位置函数

将 Null 作为 Windows Installer 函数的参数传递