在产品条件之前执行自定义操作

时间:2012-07-26 12:02:50

标签: wix windows-installer

基本上我需要在安装之前验证某个程序是否未运行。这是通过自定义操作完成的,该操作设置了属性APPRUNNING

<CustomAction Id="CheckingAppIsRunning"
          BinaryKey="AppIsRunning"
          DllEntry="AppIsRunning"/>

<Binary Id="AppIsRunning" 
        SourceFile="CustomActions.CA.dll" />

但是在显示的消息中,APPRUNNING似乎是空的,也就是说,它根本没有设置(应该是“0”或“1”)。

<Condition Message="Exit all instances of [APPNAME] before installation (APPRUNNING = [APPRUNNING]).">
    <![CDATA[APPRUNNING = "0"]]>
</Condition>

<InstallExecuteSequence>
    <Custom Action="CheckingAppIsRunning" Before="LaunchConditions" />
</InstallExecuteSequence>

我认为在条件检查时不会执行自定义操作。自定义操作后执行条件检查有哪些选项?

1 个答案:

答案 0 :(得分:9)

LaunchConditions行动计划在InstallUISequenceInstallExecuteSequence中投放。只要您将自定义操作安排到InstallExecuteSequence,就不会在InstallUISequence中触发LaunchConditions时设置该属性。

您应该在两个序列中安排CheckingAppIsRunning自定义操作。您可能还希望使用Execute='firstSequence'属性来定义它 - 这样它将运行它所遇到的第一个序列。

这就是我的意思,实际上:

<InstallUISequence>
  <Custom Action="CheckingAppIsRunning" Before="LaunchConditions" />
</InstallUISequence>
<InstallExecuteSequence>
  <Custom Action="CheckingAppIsRunning" Before="LaunchConditions" />
</InstallExecuteSequence>

定义:

<CustomAction Id="CheckingAppIsRunning" BinaryKey="AppIsRunning" DllEntry="AppIsRunning" Execute="firstSequence"/>