SetupInstallFromInfSectionA 函数 (setupapi.h)

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

SetupInstallFromInfSection 函数执行 INF 文件 Install 节中的所有指令。

如果修改了注册表或文件,则需要此函数的调用方具有写入系统或目标目录的权限。

语法

WINSETUPAPI BOOL SetupInstallFromInfSectionA(
  HWND                Owner,
  HINF                InfHandle,
  PCSTR               SectionName,
  UINT                Flags,
  HKEY                RelativeKeyRoot,
  PCSTR               SourceRootPath,
  UINT                CopyFlags,
  PSP_FILE_CALLBACK_A MsgHandler,
  PVOID               Context,
  HDEVINFO            DeviceInfoSet,
  PSP_DEVINFO_DATA    DeviceInfoData
);

参数

Owner

指向窗口句柄的可选指针,该窗口拥有安装过程中生成的任何对话框,例如磁盘提示或文件复制。 如果未指定 所有者,这些对话框将成为顶级窗口。

InfHandle

包含要处理的节的 INF 文件的句柄。

SectionName

要处理的 INF 文件中 安装 节的名称。

Flags

控制要执行的操作。 标志可以是以下值的组合。

SPINST_INIFILES

执行 INI 文件操作(UpdateInis正在处理的 Install 节中的 UpdateIniFields 行)。

SPINST_REGISTRY

执行注册表操作(AddRegDelReg安装 部分正在处理)。

SPINST_INI2REG

执行 INI 文件到注册表操作(正在处理的 Install 节中的 Ini2Reg 行)。

SPINST_LOGCONFIG

此标志仅在安装设备驱动程序时使用。

执行逻辑配置操作(正在处理的 Install 节中的 LogConf 行)。 仅 当指定了 DeviceInfoSetDeviceInfoData 时,才使用此标志。

有关安装设备驱动程序、LogConfDeviceInfoSetDeviceInfoData的详细信息,请参阅 DDK 程序员指南

SPINST_FILES

执行文件操作(CopyFilesDelFilesInstall 节中的 RenFiles 行)。

SPINST_ALL

执行所有安装操作。

SPINST_REGISTERCALLBACKAWARE

使用 RegisterDlls INF 指令在 Windows 2000 上自注册 DLL 时,SetupInstallFromInfSection 的调用方可能会在注册或注销时接收有关每个文件的通知。 若要向回调例程发送 SPFILENOTIFY_STARTREGISTRATIONSPFILENOTIFY_ENDREGISTRATION 通知,请包括SPINST_REGISTERCALLBACKAWARE以及SPINST_REGSVR或SPINST_UNREGSVR。 调用方还必须设置 msgHandler 参数

SPINST_REGSVR

若要在注册文件时向回调例程发送通知,请在 标志中包含SPINST_REGISTERCALLBACKAWARE加上SPINST_REGSVR。 调用方还必须指定 MsgHandler 参数。

SPINST_UNREGSVR

若要在注销文件时向回调例程发送通知,请在 标志中包含SPINST_REGISTERCALLBACKAWARE加上SPINST_UNREGSVR。 调用方还必须指定 MsgHandler 参数。

RelativeKeyRoot

如果 标志 包括SPINST_REGISTRY或SPINST_INI2REG,则必须指定可选参数。 INF 文件将 HKR 指定为密钥时用作根目录的注册表项的句柄。 请注意,如果使用 可选的 deviceInfoSetDeviceInfoData 集调用 SetupInstallFromInfSection,则忽略此参数。

SourceRootPath

文件副本的源根目录。 例如 A:\ 或 \pegasus\win\install。 如果 标志 包括SPINST_FILES,并且 SourceRootPath 为 NULL,则系统会提供默认根路径。

CopyFlags

如果 标志 包括SPINST_FILES,则必须指定可选参数。 指定将文件排队以供复制时传递给 SetupQueueCopySection 函数的标志。 这些标志可以是以下值的组合。

SP_COPY_DELETESOURCE

成功复制后删除源文件。 如果删除失败,则不会通知调用方。

SP_COPY_REPLACEONLY

仅当这样做会覆盖目标路径上的文件时,才复制该文件。

SP_COPY_NEWER_OR_SAME

检查正在复制的每个文件,以查看其版本资源是否指示它是否与目标上的现有副本相同或不是更新。

版本检查期间使用的文件版本信息是在 dwFileVersionMS 中指定的,dwFileVersionLSVS_FIXEDFILEINFO 结构的成员,由版本函数填充。 如果其中一个文件没有版本资源,或者它们具有相同的版本信息,则源文件被视为较新。

如果源文件在版本或更新版本中不相等,并且 指定 CopyMsgHandler,则会通知调用方并可以取消副本。 如果未指定 CopyMsgHandler,则不会复制该文件。

SP_COPY_NEWER_ONLY

检查正在复制的每个文件,以查看其版本资源是否指示它不是目标上的现有副本。 如果源文件较新,但在版本上与现有目标不相等,则会复制该文件。

SP_COPY_NOOVERWRITE

检查目标文件是否存在,如果是,请通知可能否决副本的调用方。 如果未指定 CopyMsgHandler,则不会覆盖该文件。

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

检查正在复制的每个文件,以查看其语言是否与目标上已有的任何现有文件的语言不同。 如果是这样,并且 指定 CopyMsgHandler,则会通知调用方并可以取消副本。 如果未指定 CopyMsgHandler,则不会复制该文件。

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

如果在复制操作期间使用该文件,则通知用户需要重新启动系统。 仅当稍后 调用 setupPromptRebootSetupScanFileQueue时,才使用此标志。

SP_COPY_NOSKIP

不要向用户提供跳过文件的选项。

SP_COPY_FORCE_NOOVERWRITE

检查目标文件是否存在,如果是,则不会覆盖该文件。 不通知调用方。

SP_COPY_FORCE_NEWER

检查正在复制的每个文件,以查看其版本资源(或非映像文件的时间戳)是否指示它不是目标上的现有副本。 如果正在复制的文件不是较新的,则不会复制该文件。 不通知调用方。

SP_COPY_WARNIFSKIP

如果用户尝试跳过文件,请警告他们跳过文件可能会影响安装。 (用于系统关键文件。)

MsgHandler

指向回调例程的指针。 回调例程必须采用 FileCallback格式。 有关详细信息,请参阅 通知

仅当 标志 参数不包含SPINST_FILES、SPINST_REGISTERCALLBACKAWARE加SPINST_REGSVR或SPINST_UNREGSVR时,此参数才可选。

如果 标志 包含SPINST_FILES,则必须设置 MsgHandler。 在这种情况下,使用 SetupCommitFileQueue提交文件队列时,通知将发送到回调例程。

如果 标志 包括SPINST_REGISTERCALLBACKAWARE加上SPINST_REGSVR或SPINST_UNREGSVR,则必须设置 MsgHandler。 在这种情况下,每次使用 Windows 2000 上的 RegisterDlls INF 指令注册或注销文件时,都会向回调例程发送 SPFILENOTIFY_STARTREGISTRATIONSPFILENOTIFY_ENDREGISTRATION

Context

当内部通过 SetupCommitFileQueue提交此例程生成的文件队列时,要传递给回调函数的值。 仅当 标志 参数不包含SPINST_FILES时,上下文 参数才可选。 如果 标志 包含SPINST_FILES,则必须指定此参数。

DeviceInfoSet

指向设备信息集句柄的可选指针。 有关设备安装程序设置功能的详细信息,请参阅 DDK 程序员指南

DeviceInfoData

指向指向 SP_DEVINFO_DATA 结构的指针的可选指针,该结构提供 DeviceInfoSet 指定的集中特定元素的上下文。 有关设备安装程序设置功能的详细信息,请参阅 DDK 程序员指南

返回值

如果函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

言论

如果将 UNC 目录指定为文件复制操作的目标目录,则必须在调用 setupInstallFromInfSection之前确保它存在。 安装函数不检查是否存在并且不创建 UNC 目录。 如果目标 UNC 目录不存在,则文件安装将失败。

此函数需要 Windows INF 文件。 某些较旧的 INF 文件格式可能不受支持。

注意

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

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 setupapi.h
Setupapi.lib
DLL Setupapi.dll
API 集 ext-ms-win-setupapi-classinstallers-l1-1-2(在 Windows 10 版本 10.0.14393 中引入)

另请参阅

Functions

概述

SPFILENOTIFY_ENDREGISTRATION

SPFILENOTIFY_STARTREGISTRATION

SetupInstallServicesFromInfSection