SetupInstallFileExW 函数 (setupapi.h)

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

SetupInstallFileEx 函数安装由 SetupFindXXXLine 返回的 INFCONTEXT 指定的文件,或者由文件名和路径信息显式指定。 此函数与 SetupInstallFile 相同,只不过返回指示文件是否正在使用的 BOOL

如果复制了文件,则此函数的调用方需要具有写入目标目录的权限。

语法

WINSETUPAPI BOOL SetupInstallFileExW(
  [in]  HINF                InfHandle,
  [in]  PINFCONTEXT         InfContext,
  [in]  PCWSTR              SourceFile,
  [in]  PCWSTR              SourcePathRoot,
  [in]  PCWSTR              DestinationName,
  [in]  DWORD               CopyStyle,
  [in]  PSP_FILE_CALLBACK_W CopyMsgHandler,
  [in]  PVOID               Context,
  [out] PBOOL               FileWasInUse
);

参数

[in] InfHandle

指向包含 SourceDisksNames 和 SourceDisksFiles 节的 INF 文件的句柄的可选指针。 如果用户的系统 (存在特定于平台的部分,例如 SourceDisksNames.x86 和 SourceDisksFiles.x86) ,则使用特定于平台的部分。 如果未指定 InfContext 并且 CopyStyle 包含 SP_COPY_SOURCE_ABSOLUTE 或 SP_COPY_SOURCEPATH_ABSOLUTE, 则忽略 InfHandle

[in] InfContext

指向 INF 文件中“复制文件”部分中行的上下文的可选指针。 例程在 InfHandle 的 SourceDisksFiles 部分中查找此文件,以获取文件复制信息。 如果未指定 InfContext则 SourceFile 必须为 。

[in] SourceFile

指向文件名的可选指针 (没有要复制的文件的路径) 。 在 SourceDisksFiles 节中查找该文件。 如果 InfContext 不是,则必须指定 SourceFile 参数。 但是,如果指定了 InfContext,则会忽略 SourceFile

[in] SourcePathRoot

指向要复制的文件根路径的可选指针, (例如 A:\ 或 F:) 。 SourceDisksNames 部分中的路径将追加到此路径。 如果 CopyStyle 包含 SP_COPY_SOURCE_ABSOLUTE 标志,则会忽略 SourcePathRoot 参数。

[in] DestinationName

指向复制文件的新名称的可选指针。 如果指定 了 InfContext则 DestinationName 仅提供文件名 (目标文件的路径) 。 此参数可以为 NULL ,以指示目标文件应与源文件同名。 如果未指定 InfContext,DestinationName 将提供目标的完整目标路径和文件名。

[in] CopyStyle

控制文件复制操作行为的标志。

这些标志可以是以下值的组合。

含义
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
如果在复制操作期间正在使用该文件,请提醒用户系统需要重新启动。
SP_COPY_NOSKIP
不要为用户提供跳过文件的选项。
SP_COPY_FORCE_NOOVERWRITE
检查目标文件是否存在,如果是,则不会覆盖该文件。 不会通知调用方。
SP_COPY_FORCE_NEWER
检查要复制的每个文件,以查看其版本资源是否 (或非映像文件的时间戳) 指示它并不比目标上的现有副本新。 如果要复制的文件不是较新的,则不会复制该文件。 不会通知调用方。
SP_COPY_WARNIFSKIP
如果用户尝试跳过文件,请警告他们跳过文件可能会影响安装。 (用于系统关键文件。)

[in] CopyMsgHandler

指向回调函数的可选指针,用于在文件复制期间收到各种情况的通知。

[in] Context

指向作为回调函数的第一个参数传递的调用方定义的值的指针。

[out] FileWasInUse

指向变量的指针,此函数在其中返回指示文件是否正在使用的标志。 此参数是必需的。

返回值

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

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

如果 GetLastError 返回NO_ERROR,则表示文件复制操作未完成。 文件可能尚未复制,因为不需要执行文件复制操作,或者文件回调函数返回 FALSE

注解

安装可能正在使用的系统文件的新版本时,通常使用此 API。 它会更新一个 BOOL 值,该值指示文件是否正在使用中。 如果文件正在使用中,则会推迟文件复制操作,直到系统重新启动。

如果将 UNC 目录指定为文件安装的目标目录,则必须在调用 SetupInstallFileEx 之前确保它存在。 安装程序函数不会检查是否存在,也不会创建 UNC 目录。 如果目标 UNC 目录不存在,则文件安装将失败。

注意

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

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 setupapi.h
Library Setupapi.lib
DLL Setupapi.dll

请参阅

函数

概述

SetupCloseFileQueue

SetupCommitFileQueue

SetupInstallFile

SetupOpenFileQueue

SetupPromptReboot

SetupQueueCopy