Как отложить продолжение удаления после удаления файлов?

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

[UninstallDelete] Имя: {app}; Тип: dirifempty

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


person Jack    schedule 13.04.2011    source источник


Ответы (1)


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

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

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

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

В этом вопросе рассматривается другой вариант: Inno Setup Checking для запущенного процесса

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

person Robert Love    schedule 01.06.2011