a companion discussion area for blog.codinghorror.com

What's Wrong With Setup.exe?


“However, that still can’t get rid of the wonderful prelude to installing that IE7 puts in front of you: click to the download page, click the yellow infobar, reload the page, click the download link again, click Open, wait 30 seconds, click OK on the warning dialog from IE, click OK on the warning dialog from Windows (“this came from the Internet zone, it might harm your cat!”), then click OK on the UAC prompt … and if you downloaded it in a ZIP file you’ve got another double-click in there.”

yes, unfortunately, Safari also adds this “security” rigamarole to the process. You’d think IE and Safari would both be intelligent enough to allow me to click something that says, “I hereby agree that downloading a disk image or archive containing an executable might irreparably damage my OS installation, destroy all my data, and set fire to my grandmother’s house. I hereby absolve [Apple|Microsoft] of all culpability in the case of such an event.”

But, no. Sadly, instead, we must all blindly and thoughtlessly click on “Okay” buttons, then ask ourselves, “what was that I just clicked on?”

“On the Mac side, a .app is a self-contained entity. So, Jeff, if you run an .app from within the mounted .dmg, it will work.”

Well, that’s not always true. Some apps decide they want to write things into their package folders (which is a no-no, but still), and when they get to the point where they want to do that you’re in error-handling land. Will the app inform you of a fatal disk error? Will the app inform you that it can’t run on a read-only disk image? Will it instead write to your home folder? Will it crash?

I’ve seen a few of these apps. Generally, they either give an error message or crash. Very annoying, though.

“I really dislike setup.exe-type installations. I hate not knowing what the installer is doing, for one. Is it copying a bunch of files all over the place? Where is it placing it? I’m gonna have to hunt for it later, and it’s placing shortcuts all over the map. Sometimes I can’t say ‘no’ to those.”

To be fair, this isn’t necessarily a fault of the setup process, but more a cultural fault. Anything the Setup.exe does, the application executable can also do! Yes: your application could see it hasn’t run yet, and place an alias to itself in the Dock, on the desktop, in the user’s home folder, and on every network mounted drive. Yes, your application can choose to defy convention and place its config files in the Applications folder, or your Documents folder (Microsoft, you Son of a B*tch, I’m looking at YOU!). It can change your desktop background to a high-resolution rendering of it’s application icon.

There’s two things stopping this on te Mac. First, many (but not all) of those actions would require an admin password. So, it’s hard to get a user to agree to that during an install (not really hard, though), but really hard to get them to agree to type their admin password when running your app for the first time.

The main reason, though, is that there isn’t the Culture of Installer which exists on Windows. It is expected that an installer will do all this evil system-clogging crap to you on Windows, either wholly without you being informed or because you missed unchecking that particular option. Which is why, frankly, no matter what kind of “default install” button an installer provides on Windows, I NEVER, EVER just click it. I’ve been bitten far too many times, installed far too many Monzai Buddies as a result of “default options” in the installer.

So, for me, it all comes down to developer culture. There are a lot of really good developers for Windows. Unfortunately, there are also a few assholes who make it necessary to go over the installer options with a fine-toothed comb.


I’ll keep this short… Frankly, I don’t trust installers to do the right thing.


Here’s a secret: it doesn’t have to be in the application folder. You can put it anywhere, including the desktop or your home folder, although that gets kind of messy. Since there’s no registry entries or DLLs installed in different places, dragging the application to the trash is all you need to do to uninstall it. If it makes you feel better, you could use AppZapper.


One word (well I guess it’s two symbols and a word)



Kudos on another good topic, Jeff. I quite enjoy your blog and appreciate the time you put into it!

Most of the apps I’ve installed on my iMac have been easy to install. Open the .dmg and do the “drag the icon into the Apps” move. Easy enough, I guess. But sometimes the stuff that gets dumped onto the desktop is an annoyance. I know what can get trashed, but if it were, say, my mother. Well, she might be very reluctant to move anything to the Trashcan and would end up having a desktop full of junk after a little while.

I guess I’d just like things to clean up automatically. I’m still pretty new to OS X and so there might be better way to do the install/cleanup than I’m doing.

I agree that windows installers are all over the place. Most are pretty good. Others are horrible and/or confusing.


If you’re trying to streamline the user experience, focusing your energy on how applications are installed is kind of silly.

How much of your time using the computer is spent installing applications?


I’m not affiliated with the site at all, just an extremely happy user


I know this has been covered already, but that’s a really badly-broken package for the Mac version. Apple has a set of guidelines for packaging app bundles as “Internet-enabled Disk Images” (.dmg files) to be distributed on the internet:


The short of it is, build your app as a normal app bundle (.app), and place it at the root of a disk image, alone. Make the image internet-enabled. When the image is opened (automatically, by safari, by default – DMG files as far as I know can’t contain autorun-equivalents) Finder mounts the image, extracts the contents to the folder the image was in, unmounts the image, and sends the image to the Trash. At that point the user can put the application where they please: they can leave it on the Desktop, put it in /Applications, stuff it away in ~/Internet/Cats/Catmacro Creator.app, whatever.

To uninstall the application, the user drags the .app bundle (“Catmacro Creator” in Finder, the extension is hidden normally) to the Trash.

It’s unfortunate that more vendors don’t follow Apple’s recommendations (eg., by providing a normal, non-internet-enabled disk image, or by providing a .dmg.zip instead – DMG files can be compressed through Disk Utility!); while I understand the desire to show the user a pretty splash screen, it’s unnecessary. I want to start using the program, I don’t want to look at an installer.

The first time I encountered one of these, I was a little surprised (which is a point against it) but only because I thought some piece of code contained in the disk image had deleted the disk image, rather than Finder being responsible.


Addendum: There is also a perception (created and propagated both by Apple’s documentation and by app vendors) that “drag it to Applications” is the install step. It’s not: by the time you can drag it to Applications (DMG mounted), it’s already “installed”. The Applications folder is an organization convenience (and a good habit to have), not an installation step.


Regarding PKG installers on OS X: they are definitely much more annoying that nicely behaved DMGs for applications. They are suitable only for things that must go in a specific location, such as a software SDK or a driver. It’s a major turn off when a simple app comes in a PKG installer.


"If you’re trying to streamline the user experience, focusing your energy on how applications are installed is kind of silly.

How much of your time using the computer is spent installing applications?"

Installation is a part of the overall user experience.


Macs also have a wonderful utility called Migration Assistant that copies apps settings from one computer to another. As far as I can tell it works perfectly with any apps that don’t use an installer (and maybe some that do). Apps don’t have to be specially written to support this migration utility. You also don’t have to run anything on the source computer. Only on the target.


“To be fair, Windows applications aren’t always delivered with installers, either. One of the apps I use is Kenny Kerr’s excellent Window Clippings. It’s delivered as a single executable in a compressed ZIP file. It’s a pleasingly simple arrangement, but it’s also more work me, the user. Consider how I “install” Windows Clippings:”

How is this more work? All you HAVE to do is click the .exe file which you can easily leave on your desktop after you download it. All the “extra work” you’re talking about is how you apparently prefer to have the .exe files installed. Additionally, I wouldn’t call the steps of “creating a folder + dragging the .exe file into it” error-prone".

You ask, “Wouldn’t a big giant button that says “Install Me” be a better experience for the user?” and I say, that would be great. But I think a giant .exe file that says “Run me” is better, just like the Window Clippings program you are actually COMPLAINING about says “Run me”.

Incidentally, I don’t understand how you believe winamp is hiding the lite version from you, all you have to do is look DIRECTLY NEXT TO THE OTHER VERSIONS. Seriously.


Short and sweet: different paradigm.

When a user is trained to use setup.exe, he will think that’s the only way to do it.

The example given in this article is just lame because it’s not what the advocated method is. The advocated method is to download a DMG (which can be compressed inherently) containing either a fully functioning app, or a package.

In general, when I hear PC people complaining about how poorly OS X works, it’s because they are stuck in a stone age mentality of what an application is and how it should work.

@Angstrom: “drag it to Applications” is the install step. It’s not: by the time you can drag it to Applications (DMG mounted), it’s already “installed”. The Applications folder is an organization convenience (and a good habit to have), not an installation step."

You are incorrect. There is no installation step. You can run the file from within the DMG, and then when you’re done running the file, you close the app, unmount the DMG and flush it down the garbage and it’s gone. If you haven’t modified any settings, this will leave no trace on your computer.

If anything, modification of user defaults will automatically create a pref file.


PS. What I’m saying is: installation is a paradigm that exists on windows mainly. On unix systems, and by extension on OS X, programs are run. And stored.

A DMG file is nothing more than a disk image. An .iso file if you will. In that sense, an app such as safari or firefox can be run from a mounted CD or a network drive or an ipod. There is no need to install it.

If anything, what is lacking on OS X is a proper uninstaller for programs which require more setup than a simple app copy. For example frameworks. But most of them now come with their uninstaller scripts.


I see people saying that copying the Application to the Application folder on a Mac is good or is bad. I have yet to see any one reference the fact that Apple has an equivalent to the MS Installer. So if a developer wants they can distribute an application that way. The same as you can distribute Windows applications with a zip file. The choice is one of how the developer wants to ship it. There are also a number of independent installer that will work for either platform. So in this case the Mac does not make you install it a particular way. Look at it this way you could get a tarball that only has source.


I prefer Mac OS X’s way better but not for installing the program, but rather uninstally. It’s just a quick drag to the trash and it’s gone!

I do, however, love the way programs like uTorrent and Media Player Classic are just small executables that have no EULA and don’t need to be installed but rather are just run.


In my oppinion “setup.exe” style installers are one of the most evil things in windows-land. And that’s because too many of them do not follow the rules and creates broken (overwriting stuff), littered (c:\something directories, files needlessly copied to windows\system32…) and plainly annoying (only installs for “Administrator”, not users) installations.

I sometimes even resort to the practice to run installers with a restricted user-account just to get a glimpse of what they try to do and look at the temporarily unpacked files they unpack… More often than not I just took the little .cab, .dll or driver from there and just scratched the bloated setupware.

I very much prefer the “runs-everywhere” approach of so-called portable apps that are so popoular to put on USB-sticks that the mac .dmg also adheres to. Or, on the other end, the extremely good working linux package management under debian of which the windows .msi files are just a cheap copy attempt.


This is silly.

I MUCH prefer the standard Mac OS X application installation procedure to that of Windows. And yes, it is standard, except for the few stupid developers who choose not to follow the guidelines:


Here’s why…

Most simple user applications don’t need a fancy installer. As others have pointed out: download dmg, open dmg (if the browser didn’t already do it for you), [optionally, if the developer provides a EULA, click “Agree”], and drag the application to Applications folder. Done.

A Mac OS X “application” is really just a folder containing everything it needs, except in the Finder it appears as a “bundle”, and when clicked on it will launch the executable inside within it.

The great thing about this approach, other than being dead simple, is that I know it’s not throwing files all around my system, except perhaps a preferences file in ~/Library/Preferences, and some user data in ~/Library/Application Support/

If the application DOES need to place additional files on my system, then Apple provides a very simple easy to use installer.

The problems you had are solely the application developer’s fault. Apple is very clear about all of the above, and most developers are very good about this.


Given that a DMG can be compressed there is no reason to zip it that I can think of. Also you can include a shortcut to the ‘Applications’ folder inside your DMG.

The install process for my PerfectTablePlan software on Mac is:
-open .dmg file
-accept licence
-drag app icon in .dmg to ‘Application’ shortcut icon in .dmg
-close .dmg
Thats it. Its no more complex than the (very simple) Innosetup based install for the Windows version. Try it yourself and see:

NB/I ship software on both Windows and Mac and have no religious axe to grind.