SetupInstallFromInfSectionW 函数 (setupapi.h)

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

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

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

语法

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

参数

Owner

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

InfHandle

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

SectionName

要处理的 INF 文件中的 “安装 ”部分的名称。

Flags

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

SPINST_INIFILES

(正在) 处理的 安装”部分中的 UpdateInis、UpdateIniFields 行执行 INI 文件操作。

SPINST_REGISTRY

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

SPINST_INI2REG

(正在处理的安装部分中的 Ini2Reg 行执行 INI-file 到注册表操作) 。

SPINST_LOGCONFIG

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

(正在) 处理的“安装”部分中的 LogConf 行执行逻辑配置操作。 仅当指定 了 DeviceInfoSetDeviceInfoData 时才使用此标志。

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

SPINST_FILES

(正在处理的“安装”部分中的 CopyFilesDelFilesRenFiles 行) 执行文件操作。

SPINST_ALL

执行所有安装操作。

SPINST_REGISTERCALLBACKAWARE

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

SPINST_REGSVR

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

SPINST_UNREGSVR

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

RelativeKeyRoot

如果 标志 包含SPINST_REGISTRY或SPINST_INI2REG,则必须指定的可选参数。 当 INF 文件将 HKR 指定为键时用作根的注册表项的句柄。 请注意,如果使用可选的 DeviceInfoSet 和 DeviceInfoData 集调用 SetupInstallFromInfSection,则忽略此参数。

SourceRootPath

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

CopyFlags

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

SP_COPY_DELETESOURCE

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

SP_COPY_REPLACEONLY

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

SP_COPY_NEWER_OR_SAME

检查要复制的每个文件,查看其版本资源是否指示其版本相同或不高于目标上的现有副本。

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

如果源文件的版本或更新版本不相等,并且指定 了 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 格式。 请查看通知了解详细信息。

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

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

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

Context

当此例程内部生成的文件队列通过 SetupCommitFileQueue 提交时,要传递给回调函数的值。 仅当 Flags 参数不包含SPINST_FILES时,Context 参数才可选。 如果 标志 包含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 [仅限桌面应用]
目标平台 Windows
标头 setupapi.h
Library Setupapi.lib
DLL Setupapi.dll
API 集 Windows 10版本 10.0.1439 (3 中引入的 ext-ms-win-setupapi-classinstallers-l1-1-2)

请参阅

函数

概述

SPFILENOTIFY_ENDREGISTRATION

SPFILENOTIFY_STARTREGISTRATION

SetupInstallServicesFromInfSection