InstallChecks 元素支持在本地计算机上启动各种测试,以确保应用程序的所有相应必备组件已安装。
语法
<InstallChecks>
    <AssemblyCheck
        Property
        Name
        PublicKeyToken
        Version
        Language
        ProcessorArchitecture
    />
    <RegistryCheck
        Property
        Key
        Value
    />
    <ExternalCheck
        PackageFile
        Property
        Arguments
    />
    <FileCheck
        Property
        FileName
        SearchPath
        SpecialFolder
        SearchDepth
    />
    <MsiProductCheck
        Property
        Product
        Feature
    />
    <RegistryFileCheck
        Property
        Key
        Value
        FileName
        SearchDepth
    />
</InstallChecks>
AssemblyCheck
此元素是 InstallChecks 元素的可选子元素。 对于 AssemblyCheck 的每个实例,引导程序将确保由元素标识的程序集存在于全局程序集缓存 (GAC) 中。 它不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
Name | 
必需。 要检查的程序集的完全限定名。 | 
PublicKeyToken | 
必需。 与此强名称程序集关联的公钥的缩写形式。 存储在 GAC 中的所有程序集都必须具有名称、版本和公钥。 | 
Version | 
必需。 该程序集的版本。 版本号的格式为 <主版本>.<次要版本>.<内部版本>.<修订版本>。  | 
Language | 
可选。 本地化程序集的语言。 默认值为 neutral。 | 
ProcessorArchitecture | 
可选。 此次安装所针对的计算机处理器。 默认值为 msil。 | 
ExternalCheck
此元素是 InstallChecks 元素的可选子元素。 对于 ExternalCheck 的每个实例,引导程序将在单独的进程中执行命名的外部程序,并在 Property 指示的属性中存储其退出代码。 ExternalCheck 对于实现复杂的依赖项检查很有用,当检查组件是否存在的唯一方法是对其进行实例化时也很有用。
ExternalCheck 不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
PackageFile | 
必需。 要执行的外部程序。 此程序必须是安装分发包的一部分。 | 
Arguments | 
可选。 向 PackageFile 命名的可执行文件提供命令行参数。 | 
FileCheck
此元素是 InstallChecks 元素的可选子元素。 对于 FileCheck 的每个实例,引导程序将确定命名的文件是否存在,并返回该文件的版本号。 如果文件没有版本号,则引导程序会将 Property 命名的属性设置为 0。 如果该文件不存在,则 Property 不会设置为任何值。
FileCheck 不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
FileName | 
必需。 要查找的文件的名称。 | 
SearchPath | 
必需。 要在其中查找文件的磁盘或文件夹。 如果分配了 SpecialFolder,则此路径必须是相对路径;否则,它必须是绝对路径。 | 
SpecialFolder | 
可选。 对 Windows 或 ClickOnce 具有特殊意义的文件夹。 默认值是将 SearchPath 解释为绝对路径。 有效值包括以下值:AppDataFolder。 此 ClickOnce 应用程序的应用程序数据文件夹;特定于当前用户。CommonAppDataFolder。 所有用户使用的应用程序数据文件夹。CommonFilesFolder。 当前用户的 Common Files 文件夹。LocalDataAppFolder。 非漫游应用程序的数据文件夹。ProgramFilesFolder。 32 位应用程序的标准 Program Files 文件夹。StartUpFolder。 包含系统启动时启动的所有应用程序的文件夹。SystemFolder。 包含 32 位系统 DLL 的文件夹。WindowsFolder。 包含 Windows 系统安装的文件夹。WindowsVolume。 包含 Windows 系统安装的驱动器或分区。 | 
SearchDepth | 
可选。 搜索命名文件的子文件夹的深度。 搜索采用深度优先搜索方式。 默认值为 0,这将搜索限制为由 SpecialFolder 和 SearchPath 指定的顶级文件夹。 | 
MsiProductCheck
此元素是 InstallChecks 元素的可选子元素。 对于 MsiProductCheck 的每个实例,引导程序将进行检查,以确定指定的 Microsoft Windows Installer 安装是否一直运行直至完毕。 根据安装的产品的状态设置属性值。 正值表示已安装该产品,0 或 -1 表示未安装该产品。 (有关详细信息,请参阅 Windows Installer SDK 函数 MsiQueryFeatureState。)。 如果未在计算机上安装 Windows Installer,则不设置 Property。
MsiProductCheck 不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
Product | 
必需。 已安装产品的 GUID。 | 
Feature | 
可选。 已安装应用程序的特定功能的 GUID。 | 
RegistryCheck
此元素是 InstallChecks 元素的可选子元素。 对于 RegistryCheck 的每个实例,引导程序将进行检查以确定指定的注册表项是否存在,或其是否具有指示的值。
RegistryCheck 不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
Key | 
必需。 注册表项的名称。 | 
Value | 
可选。 要检索的注册表值的名称。 默认返回默认值的文本。 Value 必须是字符串或 DWORD。 | 
RegistryFileCheck
此元素是 InstallChecks 元素的可选子元素。 对于 RegistryFileCheck 的每个实例,引导程序检索指定文件的版本,首先尝试从指定的注册表项中检索文件路径。 如果要在注册表中指定为值的目录中查找文件,这特别有用。
RegistryFileCheck 不包含任何元素,但具有以下属性。
| 属性 | 说明 | 
|---|---|
Property | 
必需。 要存储结果的属性的名称。 可以从 InstallConditions 元素下的测试中引用此属性,该元素是 Command 元素的子元素。 有关详细信息,请参阅 <Commands> 元素。 | 
Key | 
必需。 注册表项的名称。 除非设置了 File 属性,否则其值将解释为文件路径。 如果此项不存在,则不设置 Property。 | 
Value | 
可选。 要检索的注册表值的名称。 默认返回默认值的文本。 Value 值必须是字符串。 | 
FileName | 
可选。 文件的名称。 如果指定,则假定从注册表项获取的值是目录路径,并且此文件名将追加到该路径中。 如果未指定,则假定从注册表返回的值是文件的完整路径。 | 
SearchDepth | 
可选。 搜索命名文件的子文件夹的深度。 搜索采用深度优先搜索方式。 默认值为 0,这将搜索限制为由注册表项的值指定的顶级文件夹。 | 
备注
虽然 InstallChecks 下的元素定义了要运行的测试,但不会执行这些测试。 若要执行测试,必须在 Commands 元素下创建 Command 元素。
示例
下面的代码示例演示了 InstallChecks 元素,它在产品文件中用于 .NET Framework。
<InstallChecks>
    <ExternalCheck Property="DotNetInstalled" PackageFile="dotnetchk.exe" />
    <RegistryCheck Property="IEVersion" Key="HKLM\Software\Microsoft\Internet Explorer" Value="Version" />
</InstallChecks>
InstallConditions
计算 InstallChecks 时,它们会生成属性。 然后,InstallConditions 使用这些属性来确定包是应安装、绕过还是失败。 下表列出 InstallConditions:
| 条件 | 说明 | 
|---|---|
FailIf | 
如果 FailIf 条件的计算结果为 true,包将失败。 并且将不计算其余条件。 | 
BypassIf | 
如果 BypassIf 条件的计算结果为 true,包将绕过。 并且将不计算其余条件。 | 
预定义属性
下表列出了 BypassIf 和 FailIf 元素:
| 属性 | 注释 | 可能的值 | 
|---|---|---|
Version9X | 
Windows 9X 操作系统的版本号。 | 4.10 = Windows 98 | 
VersionNT | 
Windows 操作系统的版本号。 | Major.Minor.ServicePack | 
VersionNT64 | 
64 位 Windows 操作系统的版本号。 | Major.Minor.ServicePack. | 
VersionMsi | 
Windows Installer 服务的版本号。 | 2.0 = Windows Installer 2.0 | 
AdminUser | 
指定用户是否具有基于 Windows NT 的操作系统的管理员特权。 | 0 = 不具有管理员特权 1 = 管理员特权  | 
例如,要在运行 Windows 8 的计算机上阻止安装,请使用如下所示的代码:
    <!-- Block install on Windows 8 -->
    <FailIf Property="VersionNT64" Compare="VersionLessThan" Value="6.2" String="InvalidPlatform"/>
若要跳过运行安装检查,如果满足 FailIf 或 BypassIf 条件,则使用 BeforeInstallChecks 属性。 例如:
    <!-- Block install and do not evaluate install checks if user does not have admin privileges -->
    <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired" BeforeInstallChecks="true"/>
注意
从 Visual Studio 2019 Update 9 版本开始支持 BeforeInstallChecks 属性。