SetupInstallFilesFromInfSectionW 函数 (setupapi.h)
[此函数可用于“要求”部分所示的操作系统。 在后续版本中可能会更改或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 来开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]
SetupInstallFilesFromInfSection 函数将安装的所有文件排入在“复制文件”、“删除文件”和“重命名文件”部分中列出的安装的所有文件。
如果修改了文件,则需要此函数的调用方具有写入目标目录的权限。
语法
WINSETUPAPI BOOL SetupInstallFilesFromInfSectionW(
[in] HINF InfHandle,
[in] HINF LayoutInfHandle,
[in] HSPFILEQ FileQueue,
[in] PCWSTR SectionName,
[in] PCWSTR SourceRootPath,
[in] UINT CopyFlags
);
参数
[in] InfHandle
包含要安装的节的 INF 文件的句柄。
[in] LayoutInfHandle
指向包含 SourceDisksFiles 和 SourceDisksNames 节的 INF 文件的句柄的可选指针。
如果未指定 LayoutInfHandle,则使用 InfHandle 中的 SourceDisksFiles 和 SourceDisksNames 部分。
[in] FileQueue
要在其中添加安装操作的队列的句柄。
[in] SectionName
InfHandle 参数中“安装”部分的名称,该参数列出了包含要安装的文件的“复制文件”、“删除文件”和“重命名文件”部分。
使用 null-terminated 字符串。
[in] SourceRootPath
指向要复制的源文件的根路径的可选指针,例如 A:\ 或 \pegasus\win\install。
使用 null-terminated 字符串。
[in] CopyFlags
指向一组标志的可选指针,用于控制文件复制操作的行为。
标志可以是以下值的组合。
SP_COPY_DELETESOURCE
复制任务成功时删除源文件。
如果删除任务失败,则不会通知调用方。
SP_COPY_REPLACEONLY
仅复制文件以覆盖目标路径上的文件。
SP_COPY_NEWER_OR_SAME
检查复制的每个文件,以确定版本资源是否指示其版本是否与目标上的现有副本相同。
如果源文件不是较新版本或相等版本,该函数会通知可取消副本的调用方。
版本检查期间使用的文件版本信息在 dwFileVersionMS 和 dwFileVersionLS 由 Win32 版本函数填充的 VS_FIXEDFILEINFO 结构的成员中指定。
如果其中一个文件没有版本资源,或者它们具有相同的版本信息,则源文件被视为较新。
SP_COPY_NEWER_ONLY
检查正在复制的每个文件,以确定其版本资源是否指示它不是目标上的现有副本。
如果源文件较新,但在版本上与现有目标不相等,则会复制该文件。
SP_COPY_NOOVERWRITE
检查以确定目标文件是否存在。
如果目标文件存在,该函数会通知可取消副本的调用方。
SP_COPY_NODECOMP
不解压缩文件。
设置此标志时,不会向目标文件提供源名称的未压缩形式,例如,如果将 f:\x86\cmd.ex_复制到 \install\temp,则结果为以下目标文件:\install\temp\cmd.ex_。
如果未指定SP_COPY_NODECOMP标志,则会解压缩该文件,并调用目标 \install\temp\cmd.exe。
如果指定,则删除 DestinationName 的文件名部分,并将其替换为源文件的文件名。 指定SP_COPY_NODECOMP时,无法检查语言和版本信息。
SP_COPY_LANGUAGEAWARE
检查正在复制的每个文件,以确定该语言是否不同于目标上已有的任何现有文件的语言。
如果语言不同,该函数会通知可以取消复制任务的调用方。
SP_COPY_SOURCE_ABSOLUTE
SourceFile 是完整的源路径。
请勿在 INF 文件的 SourceDisksNames 节中查找它。
SP_COPY_SOURCEPATH_ABSOLUTE
SourcePathRoot 是源文件的完整路径部分。
忽略在 INF 文件的 SourceDisksNames 节中为该文件所在的源媒体指定的相对源。 如果指定了SP_COPY_SOURCE_ABSOLUTE,则忽略此标志。
SP_COPY_FORCE_IN_USE
如果目标存在且正在使用,则对文件进行排队,以便在下一次系统重新启动时进行复制。
SP_COPY_IN_USE_NEEDS_REBOOT
在复制操作期间使用该文件时,提醒用户系统需要重新启动。
SP_COPY_NOSKIP
不向用户提供跳过文件的选项。
SP_COPY_FORCE_NOOVERWRITE
检查以确定目标文件是否存在,如果目标存在,则不会覆盖该文件,并且不会通知调用方。
SP_COPY_FORCE_NEWER
检查要复制的每个文件,以确定其版本资源(或非映像文件的时间戳)指示它不是目标上的现有副本。
如果正在复制的文件不是较新文件,则不会复制该文件,并且不会通知调用方。
SP_COPY_WARNIFSKIP
警告:如果用户尝试跳过文件,则跳过文件可能会影响安装。
将此标志用于系统关键文件。
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为 0(零)。 若要获取扩展的错误信息,请调用 GetLastError。
言论
SetupInstallFilesFromInfSection 可以多次调用,以对多个 INF 节中指定的文件进行排队。 成功提交队列并复制、重命名和/或删除文件后,可以调用 SetupInstallFromInfSection 来执行注册表和 INI 安装操作。
如果将 UNC 目录指定为文件安装的目标目录,则必须确保在调用 SetupInstallFilesFromInfSection之前存在 UNC 目录。 安装函数不会检查目录是否存在,也不会创建 UNC 目录。 如果目标 UNC 目录不存在,则文件安装会失败。
注意
setupapi.h 标头将 SetupInstallFilesFromInfSection 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
SetupInstallFilesFromInfSection 会将诊断信息记录到 SetupAPI 应用程序安装文本日志。 默认情况下,此日志文件通常处于关闭状态。 可以通过修改 SetupAPI LogLevel
值的 常规日志记录级别 部分来启用它,如 设置 SetupAPI 日志记录级别中所述。 出于性能原因,仅当排查问题时,才应启用此日志文件。 启用日志文件后,可以在 %windir%\inf\setupapi.app.log
找到它。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | setupapi.h |
库 | Setupapi.lib |
DLL | Setupapi.dll |