Из моего опыта - обработка SQL и RDMS или других типов баз данных довольно неудобна, и вы всегда можете столкнуться с некоторыми проблемами, которые производитель ядра СУБД просто не скажет.
В настоящее время - самый подходящий способ (в моей производственной среде, который является очень универсальным, если сравнивать со всеми возможностями его настройки) обрабатывать вещи - это обрабатывать их в плагине NSIS и позволить Objecy Oriented Programming (например, если вы написали код на C # / C ++ / Delphi / .NET / и т. д.), заботитесь об обработке ошибок, а не об установщике. На самом деле - установщик должен только заботиться (если вы хотите сделать плагин повторно используемым, но не полностью привязанным к другому продукту с закрытым исходным кодом) о состоянии / фактологии системы, а не предоставлять вам логику для управления конфигурацией связанного продукта.
Как уже отмечали другие комментаторы, вы должны позаботиться о том, чтобы, по моему скромному мнению, слишком много опций и настроек, влияющих на саму кодовую базу установщика. Вы хотите получить требуемую логику для использования файлов SQL вместо того, чтобы возиться с перекомпиляцией NSIS, верно? :)
Конечно, использование nsExec является одним из способов сделать это, но если вы много играли с NSIS, я думаю, вы также могли бы прийти к выводу, что добавление управления стеками на основе плагинов отделено от плагина, заботясь о установке прилагаемого программного обеспечения или любая другая запрашиваемая логика, просто делает вашу реализацию и предопределенность кодовой базы непоследовательной и ненадежной.
Ответ - не делайте этого, но если у вас есть только этот вариант, сделайте его на основе некоторой методологии обратного вызова, а не сценариев оболочки или других функций, зависящих от ОС.