我有以下情况。
是否有可能告诉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 :(得分:0)
您是否有理由无法使用WiX中的ServiceInstall
和ServiceControl
元素?
看起来你让事情变得比他们需要的更复杂。