2016-11-14 18 views
0

Я не знаю, почему действие отката не работает в процессе обновления, но он работает в процессе установки, я пробовал почти весь метод, который я нашел в google, я действительно надеюсь, что смогу найти ответ здесь, так что мой вопрос: 1.Мы должны определить два пользовательских действия: один отложен, другой - откат, а откат должен быть до отложенного? , но мое действие отката просто хочет перезапустить службу при сбое обновления,, так что это необходимо сделать, и я пробовал этот метод, он не работает, но он работает в установке, что я только что определил действие отката, вы можно видеть, как следуют :(откат действий находится между в InstallInitialize и InstallFinalize)Wix rollback custom action not work in upgrade cancel

1.in InstallExecuteSequence

<Custom Action="StartAllServicesWhenRollBack" After="InstallInitialize">1</Custom> 
    <Custom Action="UninstallMysqlOdbcDriver" After="StartAllServicesWhenRollBack">1</Custom> 

2.in Фрагмент

<CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/> 
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" /> 
<CustomAction Id="UninstallMysqlOdbcDriver" BinaryKey="UninstallMysqlOdbcDriverScript" VBScriptCall="" Execute="immediate" Return="check"/> 
<Binary Id="UninstallMysqlOdbcDriverScript" SourceFile="UninstallMysqlOdbcDriver.vbs" /> 

будет откатить в установке, но не работает в обновлении, другой метод:

<Custom Action="StartAllServicesWhenRollBack" Before="StopAllServicesa">1</Custom> 
    <Custom Action="StopAllServicesa" After="InstallInitialize">1</Custom> 

    <CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/> 
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" /> 
<CustomAction Id="StopAllServicesa" BinaryKey="StopAllServicesaScript" VBScriptCall="" Execute="deferred" Return="check"/> 
<Binary Id="StopAllServicesaScript" SourceFile="stopService.vbs" /> 

этот метод не работает в обновлении, так что им запутать об этом, StopAllServicesa будет выполнять, но откат действия оленьей кожи выполнить, кажется, действие отката, не записанное в сценарии отката, Как я могу найти скрипт отката в журнале?

+0

Возможно, вам потребуется уточнить вопрос. Основное обновление - это установка и удаление. Вы не сказали, где запланировано ваше обновление. Вы также не сказали, где происходит сбой обновления, потому что сама установка обновления может выйти из строя, прежде чем удалять старый продукт в результате действия RemoveExistingProducts, или удаление старого продукта может привести к сбою и переустановить себя и отменить обновление. Сценарий отката не входит в журнал, но полный подробный журнал всего обновления имеет информацию в любом случае, потому что это журнал действий скрипта. – PhilDW

+0

ОК, THX, это серьезное обновление, потому что основное обновление будет удалять старый продукт, поэтому мое действие отката должно работать в новой версии, верно ли это, что означает, что основное обновление имеет два этапа, если я нажму кнопку отмены кнопку при удалении старой версии, мое действие отката не работает, потому что у старшего продукта нет откатного действия, но если я отменяю при установке новой версии, мое откатное действие будет работать. Итак, это мой результат теста. Так что я сказал правильно ? Это мое понимание. Я не знаю, правильно или неправильно. –

+0

Вы все еще не сказали, где ваше основное обновление упорядочено, что имеет значение. Кроме того, основное обновление происходит во время единственного индикатора выполнения (при условии, что вы выполняете нормальное обновление), поэтому вы уверены, что знаете, какой этап обновления отменяется? – PhilDW

ответ

0

Если продукт установлен, есть функция отката, чтобы пользовательские действия могли откатывать любые изменения, внесенные в систему. На самом деле нет «отката удаления». Когда продукт удаляется и каким-то образом отказывается, «откат» - это просто переустановка продукта. В этом случае нет необходимости в каких-либо особых способах отката. Если RemoveExistingProducts терпит неудачу, он просто отменяет удаление путем повторной установки продукта.

Не видя полного подробного журнала, невозможно точно определить, что происходит, но часть обновления «установить новый продукт» не выполняется, тогда установка возвращается и вызывает любые требуемые CA отката. Это ничем не отличается от того, как пользователь отменил удаление. Windows просто переустанавливает продукт и не нуждается в чем-то вроде «удаления откатных пользовательских действий», чтобы заставить его работать.

+0

THX снова, поэтому нет необходимости добавлять откат, потому что продукт w плохой переустановить, и я должен выяснить причину, почему служба не запускается, я также хочу подтвердить, что действие отката в моем журнале все принадлежит новому продукту? Перед тем, как вы объясните, я считаю, что часть действия отката относится к этапу удаления. Кроме того, действие отката службы повторного запуска работает, когда я меняю расписание MajorUpgrade на afterInstallExecute, которое сначала установит новый продукт и удалит после InstallFinalize, поэтому, если произошла ошибка до InstallFinalize, он переустановит старый продукт? –