SetupInstallFileExA 函数 (setupapi.h)
[此函数可用于“要求”部分所示的操作系统。 在后续版本中可能会更改或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 来开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]
SetupInstallFileEx 函数安装由 SetupFindXXXLine 返回的 INFCONTEXT 指定的文件,或者由文件名和路径信息显式返回。 此函数与 setupInstallFile
如果复制了文件,则需要此函数的调用方具有写入目标目录的权限。
语法
WINSETUPAPI BOOL SetupInstallFileExA(
[in] HINF InfHandle,
[in] PINFCONTEXT InfContext,
[in] PCSTR SourceFile,
[in] PCSTR SourcePathRoot,
[in] PCSTR DestinationName,
[in] DWORD CopyStyle,
[in] PSP_FILE_CALLBACK_A 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 文件中“复制文件”部分的行的上下文。 例程在 InfHand le 的 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
控制文件复制操作行为的标志。
这些标志可以是以下值的组合。
价值 | 意义 |
---|---|
|
成功复制后删除源文件。 如果删除失败,则不会通知调用方。 |
|
仅当这样做覆盖目标路径上的文件时,才复制该文件。 |
|
检查正在复制的每个文件,以查看其版本资源是否指示它是否与目标上的现有副本相同或不是更新。
版本检查期间使用的文件版本信息是在 dwFileVersionMS 中指定的,dwFileVersionLSVS_FIXEDFILEINFO 结构的成员,由版本函数填充。 如果其中一个文件没有版本资源,或者它们具有相同的版本信息,则源文件被视为较新。 如果源文件在版本中不是较新或等于的,并且指定了 CopyMsgHandler,则会通知调用方并可以取消副本。 如果未指定 CopyMsgHandler,则不会复制该文件。 |
|
检查正在复制的每个文件,以查看其版本资源是否指示它不是目标上的现有副本。 如果源文件较新,但在版本上与现有目标不相等,则会复制该文件。 |
|
检查目标文件是否存在,如果是,请通知可能否决副本的调用方。 如果未指定 CopyMsgHandler,则不会覆盖该文件。 |
|
请勿解压缩文件。 设置此标志时,不会向目标文件提供源名称的未压缩形式(如果适用)。 例如,将“f:\x86\cmd.ex_”复制到“\\install\temp”会导致目标文件“\\install\temp\cmd.ex_”。 如果未指定SP_COPY_NODECOMP标志,则会解压缩该文件,目标将称为“\\install\temp\cmd.exe”。 DestinationName的文件名部分(如果指定)将被剥离并替换为源文件的文件名。 指定SP_COPY_NODECOMP时,无法检查任何语言或版本信息。 |
|
检查正在复制的每个文件,以查看其语言是否与目标上已有的任何现有文件的语言不同。 如果是这样,并且 指定 CopyMsgHandler,则会通知调用方并可以取消副本。 如果未指定 CopyMsgHandler,则不会复制该文件。 |
|
SourceFile 是完整的源路径。 请勿在 INF 文件的 SourceDisksNames 节中查找它。 |
|
SourcePathRoot 是源文件的完整路径部分。 忽略 INF 文件的 SourceDisksNames 节中指定的相对源,该源位于该文件所在的源媒体。 如果指定了SP_COPY_SOURCE_ABSOLUTE,则忽略此标志。 |
|
如果目标存在,则行为就像正在使用一样,并将文件排入队列,以便在下次系统重新启动时进行复制。 |
|
如果在复制操作期间使用该文件,请提醒用户系统需要重新启动。 |
|
不要向用户提供跳过文件的选项。 |
|
检查目标文件是否存在,如果是这样,则不会覆盖该文件。 不通知调用方。 |
|
检查正在复制的每个文件,以查看其版本资源(或非映像文件的时间戳)是否指示它不是目标上的现有副本。 如果正在复制的文件不是较新的,则不会复制该文件。 不通知调用方。 |
|
如果用户尝试跳过文件,请警告他们跳过文件可能会影响安装。 (用于系统关键文件。) |
[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 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | setupapi.h |
库 | Setupapi.lib |
DLL | Setupapi.dll |