High-tech?
Randall said:
You guys can't be serious...
Applications that you just drag and drop to install are one thing, as they were never officially installed to begin with. The fact is that Windows Uninstaller does work, and it does remove registry entries for removed programs. I have seen a resonable package manager in every OS I have ever used. Windows, Solaris, Ubuntu, Fedora Core, AIX, all of them EXCEPT OS X. If you install a package that goes to more then one directory by default, you should be able to uninstall said package just as easily. But according to you guys I guess I am asking for too much functionallity. I appoligize for going high-tech on you. Let me just drag this conversation into the trash.
In my current job and my previous one, one of my primary resposibilities has been to create installs/uninstalls for our applications. At my previous job, I wrote my own install/uninstall engine, as the company didn't want to pay the license for a commercial install engine. I've written installs for pretty much every platform (except OS X). I have a lot of experience with other companies' installers, since we often ship third party software as part of our own applications. I can guarantee you that the majority of developers give little to no thought to their uninstallers, and usually rely only on the automatic uninstall features built into their install engine.
The most widely used install engine is Installshield. It's default uninstall features have a number of shortcomings:
It won't uninstall files created by the application after the install is run
It won't uninstall registry entries created by the application after the install is run
It won't uninstall files or folders that are read-only
It won't uninstall third party applications installed as part of your install
It won't restore environment variables changed by the install, or changed after the fact
etc., etc.
Now the developer is perfectly capable of customizing the uninstall in Installshield to handle all of these situations, but practically none ever do. On the Windows platform, Installshield's uninstall relies on the built-in Windows uninstall. But the built-in Windows uninstaller cannot handle the above situations, for a host of reasons. How do you determine that a file, folder, or registry key created or modified not during an installation should be later included in the uninstall?
It is unreasonable to expect the OS to include a package manager that monitors the computer 24/7 and magically determines which files should be part of uninstalls and which shouldn't.
Instead, the developer should be held responsible for making his uninstall cleanly remove the appropriate files. Microsoft is probably the worst offender. The uninstallers for most of the Microsoft products that I've worked with leave behind files, folders, registry keys, environment variables, etc. For example, the uninstaller for MS SQL Server used to leave behind an empty directory, but if you then tried to reinstall MS SQL Server, it wouldn't install if that directory existed, because it thought that the product was still installed.
I find the application bundle on OS X the best and cleanest solution I've ever seen. Drop the application bundle in the trash, then drop the plist file in the trash. For most applications on OS X, that's all you need to do. For any application that wants to do something more complex, the developer should provide a well-written install/uninstall.
Installshield and InstallAnywhere are both very good install engines that are available for Windows, Mac and Linux. They both handle upgrades and versions and are highly customizable. There are probably others as well. Developers should take responsibility to make an install/uninstall that works, and make sure that the uninstall is at least as good as the install.