2013-04-11 197 views
1

我有一個WiX的設置如果在升級過程中發生錯誤時,其具有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條件被排隊哪個爲了測試目的我刪除了。

任何人都可以告訴我,我需要做什麼,以便在升級設置回滾時重新創建任務? P.S .:我無權訪問任務最初創建的域,用戶名或密碼。

回答

3

您需要另一個回滾自定義操作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> 

您將需要訪問域,用戶名和密碼才能以與原來相同的方式創建任務。您可以使用Remember Property Pattern在卸載期間提供可用的屬性,但您可能希望添加其他幾項操作來加密/解密密碼,然後才能存儲該密碼。

+0

這就是我所害怕的。感謝您的示例和澄清。出於安全原因,我不會存儲憑據。由於升級失敗之後還會進行額外的調查(很可能是升級成功),這隻會造成一些不便。 – urbanhusky 2013-04-12 06:29:39