NSIS
I’ve been doing a lot of work with the Nullsoft Scriptable Install System, the installation framework that’s used to install many, many applications. I was going to write a review a while ago, and it was going to be negative, but I thought I would wait a while to see if the problems I was having were just from the awkward syntax and unorthodox operational flow of the framework.
For the most part, I like how it operates. For the simple tasks that most installers need to do, it is great. There are built-in “pages” that handle everything from showing licensing data, to selecting installation components and types, to showing install progress. There’s a long list of plugins available as well, for doing some of the more out-of-the-ordinary installer tasks, like downloading a file.
The NSIS scripting language attempts to be similar to assembly. I think this was done for speed and smaller, self-contained executables. The event loop took me a while to wrap my brain around. For doing what I wanted to do, which was to rely on an external process to handle all of the file installation details, I had to jump through a lot of hoops, adding a lot of complexity. I found myself wrestling with the architecture often.
So for general purpose scripting or programming tasks, the NSIS framework falls short. NSIS does offer access to most of the Win32 API calls through a plugin, although the syntax for that plugin is extremely cumbersome. NSIS is much better suited for very installer-specific tasks, which is obvious, now that I think about it.
(I found out there’s an NSIS Python plugin, but from the example file, it does not look very useable in a real-world situation.)