2

私は持っているWiXセットアップを持っています

<MajorUpgrade Schedule="afterInstallInitialize" 
  DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />

アップグレード中にエラーが発生した場合、セットアップはロールバックし、以前にインストールされたバージョンを復元します。ただし、カスタム アクションによって作成されたスケジュールされたタスクは失われ、復元されません。

タスクの作成/削除/ロールバックに使用しているカスタム アクションは次のとおりです。

<!-- task scheduling -->
<CustomAction Id="CreateScheduledTask" Return="check" Directory="SystemFolder"
              ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]"
              Execute= "deferred"/>
<!-- rollback in case something went wrong -->
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback"  Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" />
<!-- removal of task -->
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" Execute= "immediate"/>

としてキューに入れられます

<InstallExecuteSequence>
  <Custom Action="CreateScheduledTask_Rollback" Before="CreateScheduledTask"></Custom>
  <Custom Action="CreateScheduledTask"  Before="InstallFinalize"></Custom>
  <Custom Action="RemoveScheduledTask"  Before="RemoveFiles">
    <![CDATA[(REMOVE="ALL")]]>
  </Custom>
</InstallExecuteSequence>

アクションには、テスト目的で削除したCreateScheduledTask条件がありました。NOT Installed

アップグレードのセットアップがロールバックされたときにタスクを再作成するには、何をする必要があるか教えてもらえますか? PS: タスクが最初に作成されたドメイン、ユーザー名、またはパスワードにアクセスできません。

4

1 に答える 1

4

RemoveScheduledTask基本的に にあるものを実行するには、別のロールバック カスタム アクションが必要ですCreateScheduledTask。例えば:

<CustomAction Id="RemoveScheduledTask_Rollback" Return="ignore" Directory="SystemFolder"
          ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]"
          Execute="rollback" />

<InstallExecuteSequence>
   <Custom Action="RemoveScheduledTask_Rollback" Before="RemoveScheduledTask"">
    REMOVE="ALL"
   </Custom>
</InstallExecuteSequence>

元の方法と同じ方法でタスクを作成するには、ドメイン、ユーザー名、およびパスワードにアクセスする必要があります。プロパティの記憶パターンを使用して、アンインストール中にプロパティを使用できるようにすることができますが、パスワードを保存する前にパスワードを暗号化/復号化するための別のアクションをいくつか追加することをお勧めします。

于 2013-04-11T13:07:46.770 に答える