<InstallChecks> 元素(引导程序)
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
属性。