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
需要相关信息的文件的文件名。 如果在源媒体上找不到与命名完全相同的文件,则会使用最多两个备用的“compressed-form”名称搜索该文件。 例如,如果文件 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 |