创建安装程序

【勇芳软件工作室】汉化HomePreviousNext

安装程序通常具有以下目标:

*将文件放在正确的位置。

*要通知用户安装程序是否使用与__相差很大的版本来替换现有文件,例如用英文文件替换德语文件,或用较旧的文件替换较新的文件。

编写安装程序时,开发人员必须为安装盘上的每个文件提供以下信息:

*文件的名称和位置(简称为源文件)。

*用户硬盘上的等效文件的名称(称为目标文件)。该名称通常与安装磁盘上的文件名相同。

*文件__的共享状态,即该文件是否为正在安装的应用程序是私有的,或者可被多个应用程序共享。

对于安装磁盘上的每个文件,安装程序至少必须调用VerFindFileVerInstallFile功能。这些功能将在以下段落中简要描述。

安装程序可以使用目标文件名VerFindFile来确定文件应该在磁盘上复制的位置。此函数也可用于指定文件是否为应用程序是私有的或可以共享。如果找到该文件时出现问题,VerFindFile返回一个错误值。例如,如果Windows正在使用目标文件,VerFindFile将返回VFF_FILEINUSE。安装程序必须通知用户问题,并响应用户决定继续或结束安装。

VerInstallFile将源文件复制到由VerFindFile指定的目录中的临时文件。如果需要,VerInstallFile使用数据解压库中的函数来扩展文件。

VerInstallFile将临时文件的版本信息与目标文件的版本信息进行比较。如果两者不同,VerInstallFile返回一个或多个错误值。例如,如果临时文件比目标文件更旧,则返回VIF_SRCOLD,如果文件具有不同的语言标识符或代码页值,则返回VIF_DIFFLANG。安装程序必须通知用户问题,并响应用户决定继续或结束安装。

一些VerInstallFile错误可以恢复。也就是说,无论版本冲突如何,安装程序都可以再次调用VerInstallFile来指定VIFF_FORCEINSTALL选项来安装文件。如果VerInstallFile返回VIF_TEMPFILE,用户选择不强制进行安装,则安装程序应删除临时文件。

尝试强制安装时,VerInstallFile可能会遇到不可恢复的错误,即使以前不存在该错误。例如,在安装程序尝试强制安装之前,该文件可能被其他用户锁定。如果安装程序尝试在不可恢复的错误后强制安装,VerInstallFile将失败。安装程序必须包含从这种类型的错误中恢复的例程。

建议的解决方案是使用“安装”,“跳过”和“全部安装”按钮显示所有错误的常用对话框。(另一个解决方案是一个对话框,带有按钮“是”,“全部为”,“跳过”和“取消”。)“全部安装”按钮应防止安装程序通过将所有后续使用中的VIFF_FORCEINSTALL选项包含在{989796042 }.对于非可恢复的错误,应禁用“安装和安装所有”按钮。

要向用户显示有用的错误消息,安装程序通常必须从冲突文件的版本资源中检索信息。文件安装库提供安装程序可以用于此目的的四个功能:GetFileVersionInfoSizeGetFileVersionInfoVerQueryValueVerLanguageName.GetFileVersionInfoSize返回版本信息的大小。GetFileVersionInfo使用GetFileVersionInfoSize检索到的信息来检索包含版本信息的结构。VerQueryValue从该结构中检索特定成员。

例如,如果VerInstallFile返回VIF_DIFFTYPE错误,则安装程序应使用临时文件和目标文件上的GetFileVersionInfoVerQueryValue功能获取每个文件的一般类型。如果文件的语言冲突,安装程序也应该使用VerLanguageName将二进制语言标识符翻译成该语言的文本表示形式。(例如,0x040C转换为字符串“法语”。)

如果VerInstallFile返回文件错误,例如VIF_ACCESSVIOLATION,则安装程序应使用GetLastError函数来检索最近的错误值。该程序应将该值转换为信息性消息以向用户显示。程序不得在对VerInstallFileGetLastError的调用之间产生控制。