2015-09-01 4 views
0

Мы меняем наш инструментарий установщика из NSIS на WiX, и я хочу использовать CustomAction для удаления старых версий нашей программы, если это необходимо. Для этого мне нужно вызвать старый деинсталлятор с повышенными привилегиями до того, как будут установлены новые компоненты.Выполнение CustomAction с повышенными привилегиями в WiX (синхронно или с asyncWait)

Я использую следующие в моем файле WXS:

<CustomAction Id="RemoveLegacyProduct" Directory="ProgramFilesFolder" ExeCommand="[PROP_LEGACYUNINSTALLER]" Execute="deferred" Impersonate="no" Return="asyncWait"/> 

    <InstallExecuteSequence> 
     <Custom Action="RemoveLegacyProduct" After="InstallInitialize"><![CDATA[PROP_LEGACYUNINSTALLER AND NOT REMOVE]]></Custom> 
    </InstallExecuteSequence> 

Проблема, что я в настоящее время является то, что asyncWait не похоже на работу. Мой старый деинсталлятор запускается и до его завершения установка уже продолжается (она заканчивается еще до завершения удаления).

Как создать настраиваемое действие, которое выполняется синхронно (или, по крайней мере, установка ждет, пока действие не будет завершено)? Или есть лучший способ сделать то, что я пытаюсь?

ответ

0

Вам нужно вернуть = игнорировать или проверить, чтобы установка полностью дождалась завершения этой деинсталляции. Asyncwait означает «wait at end end», поэтому он ожидает завершения удаления в конце последовательности выполнения, поэтому он запускается параллельно с вашей установкой.

+0

Я пробовал все эти и никто не работал. Деинсталлятор всегда запускается параллельно с моей установкой. – fschoenm

0

Я нашел проблему, и это не имело никакого отношения к WiX, но старый деинсталлятор, который породил второй процесс, а затем завершен. Поэтому мой установщик был (правильно), ожидая завершения процесса, но это был неправильный процесс.

Смежные вопросы