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

此参数可以是下列值之一。 所有其他位都保留。

价值 意义
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
该函数无法加载内阁文件。
VIF_CANNOTLOADLZ32
0x00080000L
该函数无法加载压缩的文件。
VIF_CANNOTREADDST
0x00020000L
该函数无法读取目标(现有)文件。 这可以防止函数检查文件的属性。
VIF_CANNOTREADSRC
0x00010000L
该函数无法读取源文件。 这可能意味着路径未正确指定。
VIF_CANNOTRENAME
0x00002000L
该函数无法重命名临时文件,但已删除目标文件。
VIF_DIFFCODEPG
0x00000010L
新文件需要当前正在运行的系统版本无法显示的代码页。 通过使用 VIFF_FORCEINSTALL 标志集调用 VerInstallFile,可以重写此错误。
VIF_DIFFLANG
0x00000008L
新的和预先存在的文件具有不同的语言或代码页值。 通过使用 VIFF_FORCEINSTALL 标志集再次调用 VerInstallFile,可以重写此错误。
VIF_DIFFTYPE
0x00000020L
新文件具有与预先存在的文件不同的类型、子类型或操作系统。 通过使用 VIFF_FORCEINSTALL 标志集再次调用 VerInstallFile,可以重写此错误。
VIF_FILEINUSE
0x00000080L
预先存在的文件由系统使用,无法删除。
VIF_MISMATCH
0x00000002L
新的和预先存在的文件在一个或多个属性中有所不同。 通过使用 VIFF_FORCEINSTALL 标志集再次调用 VerInstallFile,可以重写此错误。
VIF_OUTOFMEMORY
0x00008000L
由于内存不足,函数无法完成请求的操作。 通常,这意味着应用程序内存不足,试图扩展压缩文件。
VIF_OUTOFSPACE
0x00000100L
由于目标驱动器上的磁盘空间不足,该函数无法创建临时文件。
VIF_SHARINGVIOLATION
0x00000400L
由于共享冲突,读取、创建、删除或重命名操作失败。
VIF_SRCOLD
0x00000004L
要安装的文件早于预先存在的文件。 通过使用 VIFF_FORCEINSTALL 标志集再次调用 VerInstallFile,可以重写此错误。
VIF_TEMPFILE
0x00000001L
新文件的临时副本位于目标目录中。 失败原因反映在其他标志中。
VIF_WRITEPROT
0x00000040L
预先存在的文件受写保护。 通过使用 VIFF_FORCEINSTALL 标志集再次调用 VerInstallFile,可以重写此错误。

言论

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

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

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

注意

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

要求

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

另请参阅

概念

参考

VerFindFile

版本信息