There are mainly two contenders for creating a package+installer under windows:
For more information, see the list of such software on wikipedia
It's free (as in beer) and the source code is available, though it's not free-software, but freeware. It's written in delphi. It's maintained and updated often.
It's maintained and updated often.
It's free software (). The tool is cross platform, and can also be executed from under linux(and other unices). This can be useful to create packages from linux (think automated update/crosscompiling/packaging).
Each time I look at NSIS documentation, it amazes me that so many projects are using it because I never figured out how to get anything out of it. NSIS just provides a language, it's up to you to figure out how to do things. For example, for automatically starting a program on a windows session, you have to figure out yourself that you need to create a shortcut in the startup folder of Program Files, and figure out yourself where Program Files is (think different language, multi-OS installation).
On the other hand, InnoSetup is like a breeze. I could write a setup file in 10 minutes and customize it quickly. The doc is good enough the end product works very well. And it tells you and helps you to put an automatic startup of your program.