Могу ли я нажать / вытолкнуть значение флага SetOverwrite в NSIS? - PullRequest
0 голосов
/ 24 мая 2019

Внутри функции или макроса мне часто требуется определенное SetOverwrite поведение. Однако я предпочитаю, чтобы эти подпрограммы очищались за собой (не оставляя невозвратные значения в стеке, сохраняя OutPath без изменений, не изменяя глобальные состояния и т. Д.), Чтобы мне не приходилось копировать поток настроек команды каждый раз, когда я хочу что-то сделать, чтобы сделать код более читабельным.

Есть ли способ сделать это с SetOverwrite? Могу ли я «обнаружить» его, сохранить и как-то восстановить?

Нет функции GetOverwrite, которую я вижу. Документы SetOverwrite ссылаются на «флаг перезаписи», хотя я не могу найти конкретные ссылки на то, что именно это. Есть ли способ, которым я могу получить значение этого (или произвольного) флага?

1 Ответ

1 голос
/ 24 мая 2019

Нет флага, с которым вы можете взаимодействовать. Существует множество флагов, которыми можно управлять с помощью плагинов, но режим перезаписи не является одним из них.

Я думаю, что режим перезаписи взаимодействует с инструкцией File и поэтому имеет некоторые ограничения во время компиляции.

Единственное, что вы можете сделать, это

${If} $something = "whatever"
  SetOverwrite on
  File "foo.txt"
${Else}
  SetOverwrite ifnewer
  File "foo.txt"
${EndIf}

SetOverwrite применяется ко всем другим File инструкциям позже в скрипте, поэтому обидно, что нет никакого способа выдвинуть / выдвинуть его состояние.

Из документации:

4.8.2 Флаги компилятора

Следующие команды влияют на то, как компилятор генерирует код и сжимает данные. Если не указано иное, эти команды действительны в любом месте сценария и влияют на каждую строку ниже, где каждая из них размещена (до тех пор, пока не будет отменена другой командой). Они не могут быть перепрыгнуты с помощью инструкций управления потоком.

...