<Commands> 元素(引导程序)

Commands 元素实现由 InstallChecks 元素下的元素描述的测试,并在测试失败的情况下声明 ClickOnce 引导程序应安装的包。

语法

<Commands
    Reboot
>
    <Command
        PackageFile
        Arguments
        EstimatedInstallSeconds
        EstimatedDiskBytes
        EstimatedTempBytes
        Log
    >
        <InstallConditions>
            <BypassIf
                Property
                Compare
                Value
                Schedule
            />
            <FailIf
                Property
                Compare
                Value
                String
                Schedule
            />
        </InstallConditions>
        <ExitCodes>
            <ExitCode
                Value
                Result
                String
            />
        </ExitCodes>
    </Command>
</Commands>

元素和属性

Commands 元素是必需的。 元素具有以下属性。

属性 说明
Reboot 可选。 确定在任何包返回重启退出代码时是否应重启系统。 以下列表显示了有效值:

Defer。 重启将推迟到将来的某个时间。

Immediate。 如果任何一个包返回了重启退出代码,则会立即重启。

None。 忽略任何重启请求。

默认为 Immediate

命令

Command 元素是 Commands 元素的一个子元素。 一个 Commands 元素可以包含一个或多个 Command 元素。 元素具有以下属性。

属性 说明
PackageFile 必需。 要安装的包的名称,应为由返回 false 的 InstallConditions 指定的一个或多个条件。 必须使用 PackageFile 元素在同一文件中定义包。
Arguments 可选。 要传递到包文件中的一组命令行参数。
EstimatedInstallSeconds 可选。 安装包所需的估计时间(以秒为单位)。 此值确定引导程序向用户显示的进度栏的大小。 默认值为 0,在这种情况下,未指定估计时间。
EstimatedDiskBytes 可选。 安装完成后包所占的估计磁盘空间量(以字节为单位)。 此值用于引导程序向用户显示硬盘空间要求。 默认值为 0,在这种情况下,引导程序不会显示任何硬盘空间要求。
EstimatedTempBytes 可选。 包所需的估计临时磁盘空间量(以字节为单位)。
Log 可选。 包生成的日志文件的路径(相对于包的根目录而言)。

InstallConditions

InstallConditions 元素是 Command 元素的一个子元素。 每个 Command 元素最多只能有一个 InstallConditions 元素。 如果 InstallConditions 元素不存在,那么将始终运行由 Condition 指定的包。

BypassIf

BypassIf 元素是 InstallConditions 元素的子元素,描述不应执行命令的肯定条件。 每个 InstallConditions 元素可以包含零个或多个 BypassIf 元素。

BypassIf 具有以下属性。

属性 说明
Property 必需。 要测试的属性的名称。 此属性必须已在之前由 InstallChecks 元素的子元素所定义。 有关详细信息,请参阅 <InstallChecks> 元素
Compare 必需。 要执行的比较的类型。 以下列表显示了有效值:

ValueEqualTo, ValueNotEqualTo, ValueGreaterThan, ValueGreaterThanOrEqualTo, ValueLessThan, ValueLessThanOrEqualTo, VersionEqualTo, VersionNotEqualTo, VersionGreaterThan, VersionGreaterThanOrEqualTo, VersionLessThan, VersionLessThanOrEqualTo, ValueExists, ValueNotExists
Value 必需。 要与属性进行比较的值。
Schedule 可选。 定义何时应计算此规则的 Schedule 标记的名称。

FailIf

FailIf 元素是 InstallConditions 元素的子元素,描述应停止执行安装的肯定条件。 每个 InstallConditions 元素可以包含零个或多个 FailIf 元素。

FailIf 具有以下属性。

属性 说明
Property 必需。 要测试的属性的名称。 此属性必须已在之前由 InstallChecks 元素的子元素所定义。 有关详细信息,请参阅 <InstallChecks> 元素
Compare 必需。 要执行的比较的类型。 以下列表显示了有效值:

ValueEqualTo, ValueNotEqualTo, ValueGreaterThan, ValueGreaterThanOrEqualTo, ValueLessThan, ValueLessThanOrEqualTo, VersionEqualTo, VersionNotEqualTo, VersionGreaterThan, VersionGreaterThanOrEqualTo, VersionLessThan, VersionLessThanOrEqualTo, ValueExists, ValueNotExists
Value 必需。 要与属性进行比较的值。
String 可选。 失败时要显示给用户的文本。
Schedule 可选。 定义何时应计算此规则的 Schedule 标记的名称。

ExitCodes

ExitCodes 元素是 Command 元素的一个子元素。 ExitCodes 元素包含一个或多个 ExitCode 元素,此元素确定安装应执行的操作以响应包中的退出代码。 Command 元素下可以有一个可选的 ExitCode 元素。 ExitCodes 没有属性。

ExitCode

ExitCode 元素是 ExitCodes 元素的一个子元素。 ExitCode 元素确定安装应执行的操作以响应包中的退出代码。 ExitCode 不包含任何子元素,但具有以下属性。

属性 说明
Value 必需。 此 ExitCode 元素应用到的退出代码值。
Result 必需。 安装应如何对此退出代码做出反应。 以下列表显示了有效值:

Success。 将包标记为已成功安装。

SuccessReboot。 将包标记为已成功安装,并指示系统重启。

Fail。 将包标记为失败。

FailReboot。 将包标记为失败,并指示系统重启。
String 可选。 应对此退出代码要向用户显示的值。
FormatMessageFromSystem 可选。 确定是使用与退出代码相对应的系统提供的错误消息,还是使用 String 中提供的值。 有效值包括 true:表示使用系统提供的错误;false:表示使用 String 提供的字符串。 默认为 false。 如果此属性为 false,但未设置 String,则会使用系统提供的错误。

示例

下面的代码示例定义了用于安装 .NET Framework 2.0 的命令。

<Commands Reboot="Immediate">
    <Command PackageFile="instmsia.exe"
             Arguments= ' /q /c:"msiinst /delayrebootq"'
             EstimatedInstallSeconds="20" >
        <InstallConditions>
           <BypassIf Property="VersionNT" Compare="ValueExists"/>
             BypassIf Property="VersionMsi" Compare="VersionGreaterThanOrEqualTo" Value="2.0"/>
        </InstallConditions>
        <ExitCodes>
            <ExitCode Value="0" Result="SuccessReboot"/>
            <ExitCode Value="1641" Result="SuccessReboot"/>
            <ExitCode Value="3010" Result="SuccessReboot"/>
            <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
        </ExitCodes>
    </Command>
    <Command PackageFile="WindowsInstaller-KB884016-v2-x86.exe"
             Arguments= '/quiet /norestart'
             EstimatedInstallSeconds="20" >
      <InstallConditions>
          <BypassIf Property="Version9x" Compare="ValueExists"/>
          <BypassIf Property="VersionNT" Compare="VersionLessThan" Value="5.0.3"/>
          <BypassIf Property="VersionMsi" Compare="VersionGreaterThanOrEqualTo" Value="3.0"/>
          <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
      </InstallConditions>
      <ExitCodes>
          <ExitCode Value="0" Result="Success"/>
          <ExitCode Value="1641" Result="SuccessReboot"/>
          <ExitCode Value="3010" Result="SuccessReboot"/>
          <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
      </ExitCodes>
    </Command>
    <Command PackageFile="dotnetfx.exe"
         Arguments=' /q:a /c:"install /q /l"'
         EstimatedInstalledBytes="21000000"
         EstimatedInstallSeconds="300">

        <!-- These checks determine whether the package is to be installed -->
        <InstallConditions>
            <!-- Either of these properties indicates the .NET Framework is already installed -->
            <BypassIf Property="DotNetInstalled" Compare="ValueNotEqualTo" Value="0"/>

            <!-- Block install if user does not have adminpermissions -->
            <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>

            <!-- Block install on Windows 95 -->
            <FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10" String="InvalidPlatformWin9x"/>

            <!-- Block install on Windows 8 or less -->
            <FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.2" String="InvalidPlatformWinNT"/>

            <!-- Block install if Internet Explorer 5.01 or later is not present -->
            <FailIf Property="IEVersion" Compare="ValueNotExists" String="InvalidPlatformIE" />
            <FailIf Property="IEVersion" Compare="VersionLessThan" Value="5.01" String="InvalidPlatformIE" />

            <!-- Block install if the operating system does not support x86 -->
            <FailIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="Intel" String="InvalidPlatformArchitecture" />
       </InstallConditions>

        <ExitCodes>
            <ExitCode Value="0" Result="Success"/>
            <ExitCode Value="3010" Result="SuccessReboot"/>
            <ExitCode Value="4097" Result="Fail" String="AdminRequired"/>
            <ExitCode Value="4098" Result="Fail" String="WindowsInstallerComponentFailure"/>
            <ExitCode Value="4099" Result="Fail" String="WindowsInstallerImproperInstall"/>
            <ExitCode Value="4101" Result="Fail" String="AnotherInstanceRunning"/>
            <ExitCode Value="4102" Result="Fail" String="OpenDatabaseFailure"/>
            <ExitCode Value="4113" Result="Fail" String="BetaNDPFailure"/>
            <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
        </ExitCodes>

    </Command>
</Commands>

另请参阅