2013-04-11 3 views
1

내가 설치가 롤백하고 이전에 설치 한 버전을 복원, 업그레이드하는 동안 오류가 발생하면윅스 사용자 지정 작업

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

이있는 윅스 설치가 있습니다. 그러나 사용자 지정 작업을 통해 만들어진 예약 된 작업은 손실되고 결코 복원되지 않습니다.

내가 작업의 생성/제거/롤백 사용하고 사용자 지정 작업

은 다음과 같습니다 CreateScheduledTask -action는 NOT Installed의 조건을 가지고
<InstallExecuteSequence> 
    <Custom Action="CreateScheduledTask_Rollback" Before="CreateScheduledTask"></Custom> 
    <Custom Action="CreateScheduledTask" Before="InstallFinalize"></Custom> 
    <Custom Action="RemoveScheduledTask" Before="RemoveFiles"> 
    <![CDATA[(REMOVE="ALL")]]> 
    </Custom> 
</InstallExecuteSequence> 

로 대기하고

<!-- 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"/> 

하는 테스트 목적으로 제거했습니다.

업그레이드 설치가 롤백 될 때 작업을 다시 만들려면 누구에게 말해야합니까? P .: 나는 원래 작업이 생성 된 도메인, 사용자 이름 또는 암호에 대한 액세스 권한이 없습니다.

답변

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