Как отложить продолжение деинсталляции после удаления файлов? - PullRequest
0 голосов
/ 13 апреля 2011

Мой сценарий удаления завершает работу запущенного приложения, однако он не полностью исчез (из-за проблем с синхронизацией), и поэтому в следующем разделе UninstallDelete папка {app} не удаляется, поскольку она не пуста. Если я выйду из приложения вручную, а затем запустите сценарий удаления, папка {app} будет удалена без ошибок.

[UninstallDelete] Имя: {приложение}; Тип: дирижабль

Мне было интересно, есть ли у кого-нибудь предложения отложить попытку удаления папки {app}. Я думал об использовании встроенной процедуры Inno Setup под названием Sleep, но я не мог понять, как и где ее использовать (например, не могу вызвать ее из раздела [UninstallRun]. Какие-либо другие предложения?

1 Ответ

0 голосов
/ 01 июня 2011

Вы можете подключить функцию function InitializeUninstall(): Boolean; или procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);.

Это запускается до запуска деинсталляции, вы можете поставить здесь галочку, чтобы убедиться, что приложение не запущено. Используя FindWindowByClassName или FindWindowByWindowsName

Если вы обнаружите, что он работает, вы можете предложить пользователю закрыть приложение. Когда пользователь говорит, что он закрыт, вы можете позвонить Sleep(), чтобы у него было достаточно времени для закрытия, прежде чем проверять снова, чтобы убедиться, что приложение действительно закрыто.

Если ваше приложение создает Mutex во время работы, вы можете использовать CheckFormMutexes в качестве альтернативы FindWindowXXX звонкам.

В этом вопросе рассматривается другая опция: Inno Setup Проверка работоспособности процесса

Независимо от метода обнаружения, вызов Sleep для ожидания решит эту проблему.

...