SetupGetFileCompressionInfoW 函数 (setupapi.h)

[此函数可用于“要求”部分所示的操作系统。 在后续版本中可能会更改或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 来开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]

SetupGetFileCompressionInfo 函数检查物理文件,以确定它是否已压缩并获取其完整路径、大小和未压缩目标文件的大小。

请注意,此函数已过时,已被 SetupGetFileCompressionInfoEx替换。 不要 SetupGetFileCompressionInfo,而是始终使用 SetupGetFileCompressionInfoEx

语法

WINSETUPAPI DWORD SetupGetFileCompressionInfoW(
  [in]      PCWSTR SourceFileName,
  [in, out] PWSTR  *ActualSourceFileName,
  [in, out] PDWORD SourceFileSize,
  [in, out] PDWORD TargetFileSize,
  [in, out] PUINT  CompressionType
);

参数

[in] SourceFileName

有关所需信息的文件的文件名。 如果在源媒体上找不到文件,则搜索该文件时最多具有两个备用的“压缩格式”名称。 例如,如果文件 F:\x86\cmd.exe 且未找到,则搜索 F:\mpis\cmd.ex_;如果未找到该文件,则搜索 F:\x86\cmd.ex$。 应使用以 null 结尾的字符串。

[in, out] ActualSourceFileName

指向接收其能够找到的文件的完整路径的变量的指针。 调用方可以使用调用 localFree 释放指针。 仅当函数返回NO_ERROR时,路径才有效。 请注意,如果 SetupAPI.dll 的版本小于 5.0.2195,则调用方需要使用从 SetupAPI MyFree 导出的函数来释放此函数分配的内存,而不是使用 LocalFree。 请参阅“备注”部分。

[in, out] SourceFileSize

指向一个变量的指针,此函数以当前形式返回文件的大小,这是由 ActualSourceFileName命名的文件的当前大小。 大小是通过检查源文件确定的;它不会从 INF 文件中检索。 仅当函数返回NO_ERROR时,源文件大小才有效。

[in, out] TargetFileSize

指向一个变量的指针,在此变量中,此函数返回文件在解压缩或复制时将占用的大小。 如果未压缩文件,此值将与 SourceFileSize相同。 大小是通过检查文件确定的;它不会从 INF 文件中检索。 仅当函数返回NO_ERROR时,目标文件大小才有效。

[in, out] CompressionType

指向一个变量的指针,此变量返回一个值,该值指示 ActualSourceFileName上使用的压缩类型。 仅当函数返回NO_ERROR时,压缩类型才有效。 该值可以是以下标志之一。

FILE_COMPRESSION_NONE

源文件未使用识别的压缩算法进行压缩。

FILE_COMPRESSION_WINLZA

源文件使用 LZ 压缩进行压缩。

FILE_COMPRESSION_MSZIP

源文件使用 MSZIP 压缩进行压缩。

返回值

该函数返回 系统错误代码,指示文件搜索的结果。 错误代码可以是以下值之一。

若要获取扩展的错误信息,请调用 GetLastError

言论

不要 SetupGetFileCompressionInfo,而是始终使用 SetupGetFileCompressionInfoEx

由于 SetupGetFileCompressionInfo 通过引用物理文件来确定压缩,因此安装程序应用程序应确保在调用 SetupGetFileCompressionInfo之前存在该文件。

请注意,如果 SetupAPI.dll 的版本小于 5.0.2195,则调用方需要使用从 SetupAPI MyFree 导出的函数来释放此函数分配的内存,而不是使用 LocalFree。 如果调用 LocalFree 会导致访问冲突,则应使用 MyFree解决问题。

下面是如何从 SetupAPI.dll获取 MyFree 函数的示例:

typedef VOID (WINAPI* MYFREEFUNC)(LPVOID lpBuff);
   MYFREEFUNC MyFree;

   HMODULE hDll=NULL;
   hDll = GetModuleHandle("SETUPAPI.DLL");
   MyFree = (MYFREEFUNC)GetProcAddress(hDll, "MyFree");
   ...
   other code here to prepare file queue
   ...
   PTSTR lpActualSourceFileName;
   SetupGetFileCompressionInfo(...,&lpActualSourceFileName,...,...,...);
   ...
   MyFree(lpActualSourceFileName); 

注意

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

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 setupapi.h
Setupapi.lib
DLL Setupapi.dll

另请参阅

Functions

概述

SetupDecompressOrCopyFile