2016-12-21 3 views
1

Я пытаюсь запустить определенную службу Windows с раздела [Code] (в обработчике AfterInstall). Когда он не запускается, я хотел бы выполнить откатовую установку.Как отключить установку Inno Setup в режиме/VERYSILENT из раздела [Code]?

Обычно, когда настройка запускается от пользовательского интерфейса, WizardForm.Close() выполняет эту работу правильно. Но когда установщик выполняется с параметром командной строки /verysilent, WizardForm.Close, похоже, игнорируется и установка продолжается. Я также пробовал Abort(), предложенный другой статьей о переполнении стека, но он работает так же, как и любой другой файл suppressiblemsgbox и не прерывает установку.

Есть ли способ условно прекратить установку в /verysilent режиме?

+0

Как вы начинаете пользоваться сервисом? Какая функция события? –

+0

@mart Я использую Exec() для запуска 'net start service_name', но это не имеет никакого отношения к проблеме. –

+0

@MartinPrikryl: О, и для функции события: я использую 'AfterInstall' из раздела' [Files] '. –

ответ

0

Невозможно вызвать программный откат.

Все, что вы можете сделать - это принудительно прекратить установку с помощью ExitProcess WinAPI function.

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

Кредиты: https://stackoverflow.com/a/7022353/850848


уборщик решение было бы установить файл и запустить службу Windows, программно в начале CurStepChanged(ssInstall). И используйте Abort function, чтобы прервать установку, если что-то пойдет не так. В этом контексте работает Abort. См. function documentation.

+0

К сожалению, я не могу использовать Abort(), потому что установщик сначала устанавливает служебные DLL, а затем использует эту службу для публикации файлов, которые устанавливаются следующим образом. Но ExitProcess() работает как шарм. Благодаря! –

0

WizardForm.Show(); // заставляя показывать даже с verysilent

+0

Как это ответить на вопрос? –