NSIS - удалить все файлы, кроме одного - PullRequest
5 голосов
/ 01 декабря 2010

Может ли кто-нибудь уточнить, что при удалении мне нужно удалить все из папки установки, кроме файла лицензии.Как я могу сделать это с помощью сценариев NSIS?

С уважением, RoboAlex.

Ответы [ 2 ]

5 голосов
/ 02 декабря 2010

Вместо открытия файла, как в третьем пункте Андерса, я бы сделал это так:

Rename $INSTDIR\license.txt $PLUGINSDIR\license.txt
RMDir /R $INSTDIR # Remembering, of course, that you should do this with care
CreateDirectory $INSTDIR
Rename $PLUGINSDIR\license.txt $INSTDIR\license.txt

В зависимости от того, когда он попадает в файл, который не может удалить, RMDir /Rможет оставить большую часть этого, так как я верю, что он прекратится, когда не сможет что-то удалить;таким образом избавится от всего этого должным образом.Это также приведет к потере статистики каталогов, но это, вероятно, не важно.

Хотя я бы порекомендовал одно из первых двух решений Андерса.Они более точные.

3 голосов
/ 01 декабря 2010

Вдобавок ко мне, есть 3 способа сделать это:

  • Использовать Delete для одного файла за раз в списке, созданном во время компиляции с помощью! System и т. Д.
  • Использование FindFirst / FindNext / FindClose во время выполнения и удаление всего, кроме лицензии, основанной на имени файла
  • Немного взломать, но вы сможете открыть файл лицензии для записи /добавьте, затем Delete / RMDir не сможет удалить файл, так как он имеет открытый дескриптор.
...