3

基本的に、インストール前に特定のプログラムが実行されていないことを確認する必要があります。これは、プロパティを設定するカスタム アクションを介して行われますAPPRUNNING

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

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

しかし、表示されたメッセージAPPRUNNINGでは、null のようです。つまり、まったく設定されていません (「0」または「1」のいずれかである必要があります)。

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

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

条件チェックの時点でカスタムアクションが実行されていないと思います。カスタム アクションの後に条件チェックを実行するオプションは何ですか?

4

1 に答える 1

10

LaunchConditionsアクションは、 と の両方で実行されるようにスケジュールされていInstallUISequenceますInstallExecuteSequence。カスタム アクションをInstallExecuteSequenceonly にスケジュールしている限り、LaunchConditions が で起動されるまでにプロパティは設定されませんInstallUISequence

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"/>
于 2012-07-26T13:00:44.133 に答える