SetupQueueDefaultCopyA 函数 (setupapi.h)
[此函数可用于“要求”部分所示的操作系统。 在后续版本中可能会更改或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 来开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]
SetupQueueDefaultCopy 函数使用 INF 文件中指定的默认源媒体和目标,将单个文件添加到安装程序文件队列中进行复制。
语法
WINSETUPAPI BOOL SetupQueueDefaultCopyA(
[in] HSPFILEQ QueueHandle,
[in] HINF InfHandle,
[in] PCSTR SourceRootPath,
[in] PCSTR SourceFilename,
[in] PCSTR TargetFilename,
[in] DWORD CopyStyle
);
参数
[in] QueueHandle
SetupOpenFileQueue返回的安装程序文件队列的句柄。
[in] InfHandle
句柄,该文件包含 SourceDisksFiles 和 SourceDisksNames 节。 如果用户的系统存在特定于平台的部分(例如,SourceDisksNames.x86 和 SourceDisksFiles.x86),则将使用特定于平台的部分。
[in] SourceRootPath
指向以 null 结尾的字符串的指针,该字符串指定此副本的源根目录,例如 A:。
[in] SourceFilename
指向以 null 结尾的字符串的指针,该字符串指定要复制的文件的文件名。
[in] TargetFilename
指向指定目标文件的文件名的以 null 结尾的字符串的指针。
[in] CopyStyle
控制文件复制操作行为的标志。 这些标志可以是以下值的组合。
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
如果在复制操作期间使用该文件,请提醒用户系统需要重新启动。
SP_COPY_NOSKIP
不要向用户提供跳过文件的选项。
SP_COPY_FORCE_NOOVERWRITE
检查目标文件是否存在,如果是,则不会覆盖该文件。 不通知调用方。
SP_COPY_FORCE_NEWER
检查正在复制的每个文件,以查看其版本资源(或非映像文件的时间戳)是否指示它不是目标上的现有副本。 如果正在复制的文件不是较新的,则不会复制该文件。 不通知调用方。
SP_COPY_WARNIFSKIP
如果用户尝试跳过文件,请警告他们跳过文件可能会影响安装。 (用于系统关键文件。)
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。
言论
如果将 UNC 目录指定为文件复制操作的目标目录,则必须在提交队列之前确保它存在。 安装函数不检查是否存在并且不创建 UNC 目录。 如果目标 UNC 目录不存在,则文件复制将失败。
此函数使用的默认目标由 INF 文件的 DestinationDirs 节中的 DefaultDestDir 键指定。
此函数需要 Windows INF 文件。 某些较旧的 INF 文件格式可能不受支持。
注意
setupapi.h 标头将 SetupQueueDefaultCopy 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | setupapi.h |
库 | Setupapi.lib |
DLL | Setupapi.dll |