2009-12-10 47 views
1

我有以下情况。当服务主要升级失败时安装以前的版本

  • MSI安装服务。
  • MSI使重大升级到此安装服务(卸载旧版本并安装新版本)
  • 在重大升级,如果它失败了,这让回滚和服务完全卸载。

是否可以告诉MSI如果服务主要升级失败, 卸载升级并安装以前版本的服务? 又如何?

这是我的代码:

<CustomAction Id="SetCustomActionDataValue" Return="check" 
Property="RunCmdRollback" Value="[INSTALLDIR], [UPGRADINGPRODUCTCODE], 
[OLDFOUND]" /> 

    <CustomAction Id="RunCmdRollback" BinaryKey="OPGInstallerCA2.dll" 
DllEntry="CustomAction1" Execute='rollback' Return="ignore" 
Impersonate='no'/> 

    <CustomAction Id='InstallServiceSetProp' Property='InstallService' 
Value='/installtype=notransaction /action=install /LogFile= 
"[#WindowsService]" "[#ConfigFile]"' /> 
    <CustomAction Id='InstallService' BinaryKey='InstallUtil' 
DllEntry='ManagedInstall' Execute='deferred' Return='ignore' 
Impersonate='no' /> 

    <CustomAction Id='UnInstallServiceSetProp' 
Property='UnInstallService' Value='/installtype=notransaction 
/action=uninstall /LogFile= "[#WindowsService]" "[#ConfigFile]"' /> 
    <CustomAction Id='UnInstallService' BinaryKey='InstallUtil' 
DllEntry='ManagedInstall' Execute='deferred' Return='ignore' 
Impersonate='no'/> 

    <CustomAction Id='CommitServiceSetProp' Property='CommitService' 
Value='/installtype=notransaction /action=commit /LogFile= 
"[#WindowsService]" "[#ConfigFile]"' /> 
    <CustomAction Id='CommitService' BinaryKey='InstallUtil' 
DllEntry='ManagedInstall' Execute='commit' Return='ignore' 
Impersonate='no' /> 

    <CustomAction Id='RollbackServiceSetProp' 
Property='RollbackService' Value='/installtype=notransaction 
/action=rollback /LogFile= "[#WindowsService]" "[#ConfigFile]"' /> 
    <CustomAction Id='RollbackService' BinaryKey='InstallUtil' 
DllEntry='ManagedInstall' Execute='rollback' Return='ignore' 
Impersonate='no' /> 

    <CustomAction Id='ConfigurePort' Execute='deferred' 
Return='ignore' BinaryKey='HTTPCFG' ExeCommand='set urlacl -u 
http://+:55555/OPGatewayService/ -a D:(A;;GA;;;NS)' Impersonate='no'/> 
    <CustomAction Id='UnConfigurePort' Execute='deferred' 
Return='ignore' BinaryKey='HTTPCFG' ExeCommand='delete urlacl -u 
http://+:55555/OPGatewayService/' Impersonate='no'/> 
    <CustomAction Id='RollbackConfigurePort' Execute='rollback' 
Return='ignore' BinaryKey='HTTPCFG' ExeCommand='delete urlacl -u 
http://+:55555/OPGatewayService/' Impersonate='no'/> 

    <CustomAction Id="StopVCA" Execute='rollback' Return='ignore' 
ExeCommand="net stop OPGatewayService" Directory="TARGETDIR" 
Impersonate='no' /> 


    <InstallExecuteSequence> 


    <InstallValidate Sequence="1400" /> 
    <RemoveExistingProducts Sequence="1402">OLDFOUND</RemoveExistingProducts> 
    <InstallInitialize Sequence="1500" /> 

    <Custom Action="ConfigurePort" 
After='InstallService'>$OPGatewayComponent>2</Custom> 
    <Custom Action="UnConfigurePort" 
After='UnInstallService'>$OPGatewayComponent=2</Custom> 

    <Custom Action='InstallServiceSetProp' 
Before='StartServices'>$OPGatewayComponent>2</Custom> 
    <Custom Action='InstallService' 
After='InstallServiceSetProp'>$OPGatewayComponent>2</Custom> 

    <Custom Action='UnInstallServiceSetProp' 
After='StopServices'>$OPGatewayComponent=2</Custom> 
    <Custom Action='UnInstallService' 
After='UnInstallServiceSetProp'>$OPGatewayComponent=2</Custom> 

    <Custom Action='CommitServiceSetProp' 
After='RollbackService'>$OPGatewayComponent>2</Custom> 
    <Custom Action='CommitService' 
After='CommitServiceSetProp'>$OPGatewayComponent>2</Custom> 

    <Custom Action='RollbackServiceSetProp' 
After='InstallService'>$OPGatewayComponent>2</Custom> 
    <Custom Action='RollbackService' 
After='RollbackServiceSetProp'>$OPGatewayComponent>2</Custom> 
    <Custom Action="StopVCA" 
After='RollbackService'>$OPGatewayComponent>2</Custom> 
    <Custom Action='RollbackConfigurePort' 
After='StopVCA'>$OPGatewayComponent>2</Custom> 
    <Custom Action='SetCustomActionDataValue' 
After='RollbackConfigurePort'>$OPGatewayComponent>2</Custom> 
    <Custom Action="RunCmdRollback" After='SetCustomActionDataValue' 
>$OPGatewayComponent>2</Custom> 

    <Custom Action='AlreadyUpdated' 
After='FindRelatedProducts'>SELFFOUND</Custom> 
    <Custom Action='NoDowngrade' 
After='FindRelatedProducts'>NEWERFOUND</Custom> 

    </InstallExecuteSequence> 

另一个问题。我如何使回滚操作(RunCmdRollback)不是 在失败的升级时执行,仅在失败的新安装上执行?

非常感谢你, 阿德里安娜

回答

0

是否有您无法使用维克斯的ServiceInstallServiceControl元素的一个原因?

它看起来像你让事情的方式比他们需要的更复杂。