<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

Command 元素是 Commands 元素的子元素。 Commands 元素可以有一个或多个 Command 元素。 它具有下列特性。

特性

说明

PackageFile

必选。 当 InstallConditions 指定的一个或多个条件返回 false 时,要安装的包的名称。 必须使用 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 2000 SP 2 or less -->
            <FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.0.3" 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>

请参见

参考

产品和包架构引用

<InstallChecks> 元素(引导程序)