SetupGetFileCompressionInfoA 函数 (setupapi.h)

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

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

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

语法

WINSETUPAPI DWORD SetupGetFileCompressionInfoA(
  [in]      PCSTR  SourceFileName,
  [in, out] PSTR   *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 [仅限桌面应用]
目标平台 Windows
标头 setupapi.h
Library Setupapi.lib
DLL Setupapi.dll

请参阅

函数

概述

SetupDecompressOrCopyFile