VerInstallFile功能根据VerFindFile功能返回的信息尝试安装指定的文件。VerInstallFile解压缩文件,如有必要,分配唯一的文件名,并检查错误,如过时的文件。
与其他文件安装功能一样,VerInstallFile只能与Win32文件映像配合使用。不支持16位Windows文件映像。
DWORD VerInstallFile(bg-Latn
DWORD 【uFlags】, | //位标志,表示条件函数行为 |
LPTSTR 【szSrcFileName】, | //要安装的文件 |
LPTSTR 【szDestFileName】, | //要安装的文件的新名称 |
LPTSTR 【szSrcDir】, | //要安装的文件的源目录 |
LPTSTR 【szDestDir】, | //安装文件的目录 |
LPTSTR 【szCurDir】, | //当前安装文件的目录 |
LPTSTR 【szTmpFile】, | //接收安装过程中使用的文件的临时副本的名称 |
PUINT 【lpuTmpFileLen】 | // szTmpFile中的字符串大小 |
); |
参数
【uFlags】
包含一个标志的位掩码。此参数可以是以下值之一:
旗 | 描述 |
VIFF_FORCEINSTALL | 安装文件,不管版本号不一致。该函数仅在安装过程中检查物理错误。 |
VIFF_DONTDELETEOLD | 如果以前安装的文件不在目标目录中,则安装文件而不删除先前安装的文件。 |
所有其他值都保留。
【szSrcFileName】
指向要安装的文件的名称。这是【szSrcDir】参数指向的目录中的文件名。文件名只能包含文件名和扩展名,而不是路径。
【szDestFileName】
指向VerInstallFile的名称将在安装后给出新的文件。该文件名可能与【szSrcFileName】目录中的文件名不同。新名称应仅包含文件名和扩展名,而不是路径。
【szSrcDir】
指向包含找到新文件的目录的名称的缓冲区。
【szDestDir】
指向缓冲区,其中包含应安装新文件的目录的名称。VerFindFile在【szDestDir】参数中返回此值。
【szCurDir】
指向包含找到此文件的预先存在的版本的目录的名称的缓冲区。VerFindFile在【szCurDir】参数中返回此值。
【szTmpFile】
指向初始调用VerInstallFile时应为空的缓冲区。该函数使用源文件的临时副本的名称填充缓冲区。缓冲区应至少为_MAX_PATH个字符,尽管这不是必需的。
【lpuTmpFileLen】
指向包含【szTmpFile】缓冲区长度的变量。该指针不能为NULL。
当函数返回时,【lpuTmpFileLen】包含【szTmpFile】中返回的数据的大小(字符),包括终止空字符。如果缓冲区太小而不能包含所有数据,则【lpuTmpFileLen】将是保存数据所需的缓冲区的大小。
返回值
返回值是指示异常的位掩码。它可以是一个或多个以下值:
值 | 含义 |
VIF_TEMPFILE | 新文件的临时副本位于目标目录中。失败的原因反映在其他旗帜中。 |
VIF_MISMATCH | 新的和预先存在的文件在一个或多个属性中有所不同。可以通过设置VIFF_FORCEINSTALL标志再次调用VerInstallFile来覆盖此错误。 |
VIF_SRCOLD | 要安装的文件比预先存在的文件旧。可以通过调用VerInstallFile再次设置VIFF_FORCEINSTALL标志来覆盖此错误。 |
VIF_DIFFLANG | 新的和预先存在的文件具有不同的语言或代码页值。可以通过设置VIFF_FORCEINSTALL标志再次调用VerInstallFile来覆盖此错误。 |
VIF_DIFFCODEPG | 新文件需要无法显示当前运行的Windows版本的代码页。可以通过调用VerInstallFile设置VIFF_FORCEINSTALL标志来覆盖此错误。 |
VIF_DIFFTYPE | 新文件与预先存在的文件有不同的类型,子类型或操作系统。通过设置VIFF_FORCEINSTALL标志再次调用VerInstallFile可以覆盖此错误。 |
VIF_WRITEPROT | 预先存在的文件是写保护的。可以通过设置VIFF_FORCEINSTALL标志再次调用VerInstallFile来覆盖此错误。 |
VIF_FILEINUSE | 预先存在的文件由Windows使用,无法删除。 |
VIF_OUTOFSPACE | 由于目标驱动器上的磁盘空间不足,该函数无法创建临时文件。 |
VIF_ACCESSVIOLATION | 读取,创建,删除或重命名操作由于访问冲突而失败。 |
VIF_SHARINGVIOLATION | 由于共享冲突,读取,创建,删除或重命名操作失败。 |
VIF_CANNOTCREATE | 该函数无法创建临时文件。具体错误可以用另一个标志来描述。 |
VIF_CANNOTDELETE | 该函数无法删除目标文件,或无法删除位于另一目录中的文件的现有版本。如果设置了VIF_TEMPFILE位,安装失败,目标文件可能无法删除。 |
VIF_CANNOTDELETECUR | 文件的现有版本无法删除,并且未指定VIFF_DONTDELETEOLD。 |
VIF_CANNOTRENAME | 该函数无法重命名临时文件,但已删除目标文件。 |
VIF_OUTOFMEMORY | 由于内存不足,该函数无法完成所请求的操作。通常,这意味着应用程序用尽了尝试扩展压缩文件的内存。 |
VIF_CANNOTREADSRC | 该函数无法读取源文件。这可能意味着路径没有被正确指定。 |
VIF_CANNOTREADDST | 该函数无法读取目标(现有)文件。这样可以防止函数检查文件的属性。 |
VIF_BUFFTOOSMALL | 【szTmpFile】缓冲区太小,无法包含临时源文件的名称。当函数返回时,【lpuTmpFileLen】包含保存文件名所需的缓冲区的大小。 |
所有其他值都保留。
备注
VerInstallFile将文件从源目录复制到目标目录。如果【szCurDir】表示系统上存在该文件的先前版本,VerInstallFile将比较文件的版本戳记信息。如果先前安装的文件版本比新版本更新,或者如果文件的属性显着不同,例如,如果它们使用不同的语言,则VerInstallFile返回一个或多个可恢复的错误代码。
VerInstallFile将目标目录中的临时文件留下。应用程序可以覆盖错误或删除临时文件。如果应用程序覆盖错误,VerInstallFile将删除先前安装的版本,并使用原始文件名重命名临时文件。
也可以看看