InstallValidate 操作
InstallValidate 操作验证成本归属的所有卷是否可提供足够的空间用于安装。 如果任一卷的磁盘空间不足,InstallValidate 操作将结束安装并返回严重错误。
如果要覆盖或删除的一个或多个文件当前已被活动进程使用,InstallValidate 操作还会通知用户。 有关详细信息,请参阅系统重启。
顺序限制
CostFinalize 操作和允许用户修改选择状态和/或目录的任何 UI 对话框序列应排序在 InstallValidate 操作之前。
更改功能或组件安装状态的自定义操作必须排序在 InstallValidate 操作之前。
ActionData 消息
没有 ActionData 消息。
备注
通常,当用户尝试启动文件复制时,前一个 UI 对话框序列应执行与 InstallValidate 操作相同的验证。 如果所选卷不能提供足够的空间用于安装,则此 UI 对话框序列应显示“磁盘空间不足”对话框。 UI 对话框的创建方式应该可以在磁盘空间不足时阻止用户继续安装。 对于静默安装,如果磁盘空间不足,无法通过用户界面和 InstallValidate 操作终止安装。 如果启用了日志记录,则会在日志文件中记录提前终止的原因。
在文件成本计算过程中,如果任何文件在已打开以供执行或修改的情况下被任何进程覆盖或删除,则会将一个条目添加到内部 FilesInUse 表。 FilesInUse 表包含该文件的名称和完整路径列。 执行 InstallValidate 操作时,安装程序会查询 FilesInUse 表中的条目,并确定使用该文件的进程的名称。 对于此该查询识别的每个唯一进程,InstallValidate 操作会将一条记录添加到 ListBox 用户界面表。 该记录的每一列包含以下值:
属性:FileInUseProcess
值:进程名称
文本:进程主窗口标题中包含的文本
然后,InstallValidate 操作会显示“文件已被使用”对话框。 此对话框显示必须关闭的、以避免需要重启系统来替换已被使用的文件的进程。
InstallValidate 操作在 Dialog 表中查询使用保留名称 FilesInUse 创建的对话框并显示它。 此对话框必须包含一个与名为 FileInUseProcess 的属性关联的 ListBox 控件。 按照惯例,此对话框包含“退出”、“重试”或“忽略”按钮,但是否包含将由 UI 作者决定。 每个按钮应与 ControlEvent 表中的 EndDialog ControlEvent 相关联。 InstallValidate 操作对 DoAction ControlEvent 返回的值做出如下响应,由与用户按下的按钮关联的这些 EndDialog 参数之一指示:
Retry:清除添加到 ListBox 表的所有值,重复整个文件成本计算过程,并重新检查文件是否仍被使用。 如果仍然识别到有一个或多个进程在使用要覆盖或删除的文件,则重复该过程;否则,InstallValidate 会将控制权返回给安装程序并显示状态 msiDoActionStatusSuccess。
Exit:InstallValidate 操作立即将控制权返回给安装程序并显示状态 msiDoActionStatusUserExit。 这会终止安装。
任何其他返回值:InstallValidate 操作立即将控制权返回给安装程序并显示状态 msiDoActionStatusSuccess。 在这种情况下,由于一个或多个文件仍被使用,后续的 InstallFiles 和/或 InstallAdminPackage 操作必须计划于重启系统时替换或删除已被使用的文件。
如果数据库中没有 ListBox 表,则 InstallValidate 将静默退出且不会出错。
分号是转换、源和修补程序的列表分隔符,不应在这些文件名或路径中使用。
安装程序永远不会将在只读位置标记为只读的文件视为已被使用。
如果用户界面级别为基本,则系统会向用户显示包含“中止”和“重试”按钮的默认“磁盘空间不足”对话框。