verInstallFileW 函数 (winver.h)

根据 VerFindFile 函数返回的信息安装指定的文件。 VerInstallFile 会解压缩文件,如有必要,会分配唯一的文件名,并检查错误,例如过时的文件。

语法

DWORD VerInstallFileW(
  [in]      DWORD   uFlags,
  [in]      LPCWSTR szSrcFileName,
  [in]      LPCWSTR szDestFileName,
  [in]      LPCWSTR szSrcDir,
  [in]      LPCWSTR szDestDir,
  [in]      LPCWSTR szCurDir,
  [out]     LPWSTR  szTmpFile,
  [in, out] PUINT   puTmpFileLen
);

参数

[in] uFlags

类型:DWORD

此参数的取值可为下列值之一: 所有其他位都保留。

Value 含义
VIFF_FORCEINSTALL
0x0001
安装文件,而不考虑不匹配的版本号。 函数仅在安装过程中检查物理错误。
VIFF_DONTDELETEOLD
0x0002
如果以前安装的文件不在目标目录中,则安装文件而不删除以前安装的文件。

[in] szSrcFileName

类型: LPCTSTR

要安装的文件的名称。 这是 szSrcDir 参数指向的目录中的文件名;文件名只能包含文件名和扩展名,不能包含路径。

[in] szDestFileName

类型: LPCTSTR

名称 VerInstallFile 将在安装时提供新文件。 此文件名可能与 szSrcFileName 目录中的文件名不同。 新名称应仅包含文件名和扩展名,而不包括路径。

[in] szSrcDir

类型: LPCTSTR

可在其中找到文件的目录的名称。

[in] szDestDir

类型: LPCTSTR

文件应安装到的目录的名称。 VerFindFile 在其 szDestDir 参数中返回此值。

[in] szCurDir

类型: LPCTSTR

可在其中找到此文件的预先存在的版本的目录的名称。 VerFindFile 在其 szCurDir 参数中返回此值。

[out] szTmpFile

类型: LPTSTR

源文件的临时副本的名称。 缓冲区的长度应至少 为 _MAX_PATH 个字符,但这不是必需的,并且输入时应为空。

[in, out] puTmpFileLen

类型: PUINT

szTmpFile 缓冲区的长度。 此指针不得为 NULL

当函数返回时, lpuTmpFileLen 接收 szTmpFile 中返回的数据的大小(以字符为单位),包括终止 null 字符。 如果缓冲区太小,无法包含所有数据, 则 lpuTmpFileLen 将是保存数据所需的缓冲区大小。

返回值

类型:DWORD

返回值是指示异常的位掩码。 它可以是下面的一个或多个值。 所有其他值都保留。

返回代码/值 说明
VIF_ACCESSVIOLATION
0x00000200L
由于访问冲突,读取、创建、删除或重命名操作失败。
VIF_BUFFTOOSMALL
0x00040000L
szTmpFile 缓冲区太小,无法包含临时源文件的名称。 当函数返回时, lpuTmpFileLen 包含保存文件名所需的缓冲区大小。
VIF_CANNOTCREATE
0x00000800L
函数无法创建临时文件。 特定错误可能由另一个标志描述。
VIF_CANNOTDELETE
0x00001000L
函数无法删除目标文件,也不能删除位于另一个目录中的现有文件版本。 如果设置了 VIF_TEMPFILE 位,则安装失败,并且可能无法删除目标文件。
VIF_CANNOTDELETECUR
0x00004000L
无法删除文件的现有版本,并且未指定 VIFF_DONTDELETEOLD
VIF_CANNOTLOADCABINET
0x00100000L
函数无法加载 cabinet 文件。
VIF_CANNOTLOADLZ32
0x00080000L
函数无法加载压缩的文件。
VIF_CANNOTREADDST
0x00020000L
函数无法读取目标 (现有) 文件。 这会阻止函数检查文件的属性。
VIF_CANNOTREADSRC
0x00010000L
函数无法读取源文件。 这可能意味着未正确指定路径。
VIF_CANNOTRENAME
0x00002000L
函数无法重命名临时文件,但已删除目标文件。
VIF_DIFFCODEPG
0x00000010L
新文件需要当前运行的系统版本无法显示的代码页。 可以通过调用设置了 VIFF_FORCEINSTALL 标志的 VerInstallFile 来替代此错误。
VIF_DIFFLANG
0x00000008L
新的和预先存在的文件具有不同的语言或代码页值。 可以通过再次调用 VerInstallFile 并设置 VIFF_FORCEINSTALL 标志来重写此错误。
VIF_DIFFTYPE
0x00000020L
新文件具有与预先存在的文件不同的类型、子类型或操作系统。 可以通过再次调用 VerInstallFile 并设置 VIFF_FORCEINSTALL 标志来重写此错误。
VIF_FILEINUSE
0x00000080L
系统正在使用预先存在的文件,无法删除。
VIF_MISMATCH
0x00000002L
新的和预先存在的文件在一个或多个属性上有所不同。 可以通过再次调用 VerInstallFile 并设置 VIFF_FORCEINSTALL 标志来重写此错误。
VIF_OUTOFMEMORY
0x00008000L
由于内存不足,函数无法完成请求的操作。 通常,这意味着应用程序在尝试扩展压缩文件时内存不足。
VIF_OUTOFSPACE
0x00000100L
由于目标驱动器上的磁盘空间不足,函数无法创建临时文件。
VIF_SHARINGVIOLATION
0x00000400L
由于共享冲突,读取、创建、删除或重命名操作失败。
VIF_SRCOLD
0x00000004L
要安装的文件早于预先存在的文件。 可以通过再次调用 VerInstallFile 并设置 VIFF_FORCEINSTALL 标志来重写此错误。
VIF_TEMPFILE
0x00000001L
新文件的临时副本位于目标目录中。 失败原因反映在其他标志中。
VIF_WRITEPROT
0x00000040L
预先存在的文件受写保护。 可以通过再次调用 VerInstallFile 并设置 VIFF_FORCEINSTALL 标志来重写此错误。

注解

此函数适用于 16 位、32 位和 64 位文件映像。

VerInstallFile 将文件从源目录复制到目标目录。 如果 szCurDir 指示系统上存在文件的早期版本, VerInstallFile 会比较文件的版本标记信息。 如果以前安装的文件版本比新版本更新,或者文件的属性明显不同(例如,如果它们使用不同的语言),则 VerInstallFile 将返回一个或多个可恢复错误代码。

VerInstallFile 将临时文件保留在目标目录中。 应用程序可以重写错误或删除临时文件。 如果应用程序重写错误, VerInstallFile 会删除以前安装的版本,并使用原始文件名重命名临时文件。

注意

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

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winver.h (包括 Windows.h)
Library Version.lib
DLL Api-ms-win-core-version-l1-1-0.dll

请参阅

概念性

引用

VerFindFile

版本信息