SetupQueueDefaultCopyW 函数 (setupapi.h)
[此函数可用于“要求”部分所示的操作系统。 它可能在后续版本中变更或不可用。 不应再使用 SetupAPI 来安装应用程序。 请改用 Windows Installer 开发应用程序安装程序。 SetupAPI 继续用于安装设备驱动程序。]
SetupQueueDefaultCopy 函数使用 INF 文件中指定的默认源媒体和目标,将单个文件添加到安装程序文件队列进行复制。
语法
WINSETUPAPI BOOL SetupQueueDefaultCopyW(
[in] HSPFILEQ QueueHandle,
[in] HINF InfHandle,
[in] PCWSTR SourceRootPath,
[in] PCWSTR SourceFilename,
[in] PCWSTR TargetFilename,
[in] DWORD CopyStyle
);
参数
[in] QueueHandle
安装程序文件队列的句柄,由 SetupOpenFileQueue 返回。
[in] InfHandle
包含 SourceDisksFiles 和 SourceDisksNames 节的打开 INF 文件的句柄。 如果用户的系统 (存在特定于平台的部分,例如 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
检查要复制的每个文件,查看其版本资源是否指示其版本等于或不高于目标上的现有副本。
版本检查期间使用的文件版本信息是在VS_FIXEDFILEINFO结构的 dwFileVersionMS 和 dwFileVersionLS 成员中指定的,由版本函数填充。 如果其中一个文件没有版本资源,或者它们具有相同的版本信息,则会将源文件视为较新。
如果源文件在版本或更高版本中不相等,并且指定 了 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 的 filename 部分(如果已指定)将被去除并替换为源文件的文件名。 指定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 [仅限桌面应用] |
目标平台 | Windows |
标头 | setupapi.h |
Library | Setupapi.lib |
DLL | Setupapi.dll |