Wix - как запустить exe после установки, завершить установку после удаления?

Я использую установщик wix для перезаписи (читай: изменение существующих значений реестра), добавления новых и т. Д. После удаления мне нужно вернуть их в исходное состояние (те, которые я изменил). Поскольку это не поддерживается Wix, и поэтому мне нужно использовать настраиваемое действие (как я читал), я хочу запустить exe, который будет запускать файл .reg с использованием reg import. Согласно этому сайту: http://www.installsite.org/pages/en/isnews/200108/index.htm мое настраиваемое действие должно выполняться After="InstallFinalize", потому что откат wix удалит мой импорт реестра (как часть отката). По сути, это выглядит так: установщик изменяет значения reg, деинсталлятор удаляет все затронутые изменения реестра (часть отката), мой exe восстановит их.

Итак, я сделал, как он сделал, чтобы запустить свой exe с повышенными правами и т. Д. http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html

            <Component Id="registry" Guid="*">
              <File Id="regexe" Source="RegistryRollback.exe"/>
              <File Id="regfile" Source="Reg_rollback.reg" />
            </Component>

<Property Id="LaunchRegExe" Value="[#regexe]" />
<CustomAction Id="LaunchRegExe" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

<Custom Action='LaunchRegExe' After='InstallFinalize'>Installed AND NOT UPGRADINGPRODUCTCODE</Custom>

но я получаю Error 19 ICE77: LaunchRegExe is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table C:\Merlin\Main\Demo\KioskDemoSetup\nw_setup\nw.wxs 250 1 nw_setup

Спасибо за помощь!


person sceiler    schedule 30.10.2014    source источник
comment
Здесь не видно всей картины ... где вы меняете значения реестра? Где вас беспокоит, что действие отката отменяет ваши изменения? Из того, что мы видим здесь, помимо того факта, что отложенные действия должны выполняться между InstallInitialize и InstallFinalize, ваше действие будет выполняться только при удалении, которое ведет себя иначе, когда вы его отменяете. Означает, что ваш exe будет запускаться только при удалении, в отложенном контексте, когда-то до того, как (де) установка будет завершена.   -  person Ryan J    schedule 31.10.2014


Ответы (1)


Согласно этому сайту: http://www.installsite.org/pages/en/isnews/200108/index.htm мое настраиваемое действие должно выполняться After = "InstallFinalize", потому что откат wix удалит мой импорт реестра (как часть отката).

Вы можете уточнить, где это упоминается на этом сайте? Я смотрю на него, но не могу найти причину, по которой ваше действие должно выполняться с After="InstallFinalize".

Что там упоминается, так это то, что

Пользовательские действия отложенного, отката и фиксации могут быть размещены только между InstallInitialize и InstallFinalize.

В чем причина вашей ошибки: у вас есть отложенное действие, но вы хотите запустить его после installfinalize.

Сценарий отката будет выполнен, если установка (или удаление) будет прервана, например, когда она отменена пользователем. Я думаю, вы можете просто запустить действие с Before="InstallFinalize".

person Akos Bannerth    schedule 30.10.2014
comment
Он находится в «Последовательности выполнения установки». На этом втором этапе изменяется целевой компьютер, т. Е. Копируются файлы, записываются записи в реестр и т. Д. Под откатом я имел в виду откат всех изменений, выполненных установщиком, например, удаление папки установки, откат изменений, внесенных в реестр во время установки (читайте: удалите их). Итак, согласно этому сайту, мне нужно запустить exe после этого, потому что в противном случае мой exe восстановит реестр только для удаления wix. Или я что-то здесь неправильно понял? - person sceiler; 31.10.2014
comment
Эти существующие записи реестра перезаписываются или создаются установщиком? В первом случае я не уверен, будут ли они удалены при удалении по умолчанию ... Тем не менее, если вы хотите убедиться, что сценарий выполняется после этапа удаления реестра, я думаю, вы можете просто использовать After='RemoveRegistryValues' (но должны быть перед установкой finalize, потому что после этого отложенное действие не может быть выполнено). К сожалению, сейчас я не могу его протестировать, но, судя по документации, он должен работать. - person Akos Bannerth; 31.10.2014
comment
Before = InstallFinalize делает свое дело! - person Uwe Köhler; 19.01.2021