Есть ли способ освободить исполняемый файл и его зависимости после использования его с Exec в NSIS - PullRequest
0 голосов
/ 03 апреля 2019

Чтобы освободить DLL, мы используем «? U», как показано ниже, когда мы вызываем DLL.

System::Call "Launch.dll::IsDriverPresent() i.r0 ?u"

Аналогичным образом, есть ли способ освободить или выгрузить исполняемый файл и его зависимости после его использования?

Потому что иногда после удаления в установленном каталоге исполняемый файл и его зависимости все еще присутствуют.

Ниже приведена строка, которую мы используем для вызова Exec:

Exec '"$INSTDIR\ValidateDriver.exe" ON'

1 Ответ

0 голосов
/ 04 апреля 2019

Нет, вы не можете выгрузить .EXE. .EXE будет заблокирован до тех пор, пока не закончится его последний поток, и все дескрипторы всех потоков и сам процесс не будут закрыты.

Если вы убиваете / завершаете процесс и он все еще заблокирован, то, скорее всего, какое-то антивирусное программное обеспечение все еще удерживает блокировку файла.

Вы можете вызывать Delete и Sleep в цикле, и примерно через 10 секунд повторных попыток вам, возможно, придется просто отказаться или отобразить MessageBox для пользователя.

...