How do you define a good installer?
Did read Christopher Painter blog “Back To Basics – Installation Principles” today. It contain some very basic rules of creating an installer. In his blog he lists 14 point of what to avoid and what you installer should do to be a good installer? I have personally seen big problem rise from his advice number 12 about using standard installation part and avoid using you home maid as much as possible. So to make it short, I think every installer developer should really look into this list to avoid doing the same mistakes.
And here is the list copied from Christopher.
1) Remember that your install is the very first impression the user gets of your application. If your install sucks or worse fails that will not want to use your software or your support desk will get flooded with calls. I can not understate this point. I have saved companies from the brink of bankruptcy by fixing their deployment problems and I’ve seen companies fail that were unwilling to take their problems seriously.
2) The install must be bullet proof. It must work on any kind of machine you throw at it. Keep It Simple and avoid anything that could be brittle. Know and follow all current windows platform best practices
3) Perform all of your checks, user inputs, validation up front. Prevent failures up front.
4) Have a clear point of no return. You should make no state changes prior to that point and there should be no user prompts after this point.
5) Avoid Reboots – e.g. Don’t settle for getting your service to start by performing a reboot
6) The installation should be transactional ; support rollback. We are all on or all off – no in between.
7) The installer must support silent installation including all settings that could be manipulated if running interactively.
Keep the UI Simple. People don’t read; they just press next. Let the defaults represent the general case.
9) Don’t step on other peoples software. Take care with regards to DLL hell when installing shared components.
10) You must have a safe uninstall that doesn’t break the system or ask the user scary questions like “do you want to remove these shared dll’s?” Dll what? is what your use will think.
11) Think ahead about servicing your application. You must be able to upgrades and patching ( your choice )
12) Always avoid rolling your own. Learn to use Windows Installer and follow all of it’s best practices.
Finally I have a personal mantra that I follow:
It’s not my machine, it’s my customers machine. DO NO EVIL.
1) Don’t change system settings. I once had a developer ask me to change the regional settings to make a report look better with no concern of the broader implications.
2) Don’t change the security posture of the machine. Don’t open up ACLs on directories or create service accounts with fixed passwords.
3) Don’t install ad-ware / malware. Sorry but no, I don’t want your damn Google / Yahoo! toolbar and so on. If you must, make it an opt-in not an opt-out and by damn don’t intentionally break your UI so that when the user says no you do it anyways.
4) Don’t be annoying with autoupdates. Make it an opt-in not an opt-out.