FollowSteph Follow Steph as he posts Blog Blazer Friday

Just How Important is Your Software Installer?

Most people probably think it’s not that important, as long as it just works and installs your software for you. However the reality is that this is far from true. Your installer is the first impression people have of your software, and you only get one chance! If it doesn’t work, if it’s hard to do, it will cause a negative perception of your software before they even have a chance to try it! I don’t know how many of you are familiar with Zune, but this software is getting a horrible reputation online because of how difficult it is to install. Just look at the size of this review, it doesn’t really talk about the software, it’s all about how horrible the installation process is! So why start with a negative against yourself when there’s no need.

Not only is it your first impression, but just as importantly it’s not part of your core product. So in other words, not only is it important to do right, you also don’t want to spend too much time on it (it’s used only once) and it’s not your core competency. Talk about contradicting priorities!

Therefore, that being said, I strongly suggest you look at a software solution that will build your installer for you. Some of them are great, others not so great. Not only that, but they also range in price from free to very expensive, as well as in complexity, and what you can do with them. Before I start to go into details, just to give you a disclaimer, we at LandlordMax now use Install4J which I strongly personally recommend.


Getting back to the discussion, I’ve personally used 4 different installer packages in my career, including 3 with LandlordMax alone (there is some overlap). The first installer I ever played with was a custom built installer for the company I was working for at the time. Yes this solution worked, and it had by far the most customization, but it was also the most expensive to maintain and support. It’s really a second application for the company. They eventually moved to InstallShield, which at the time was one of the better solutions (this was many years ago). It worked, it definitely simplified the installer process. Now although I said it simplified it, it wasn’t the end all be all solution by far. If I remember right (this is a long time ago), every wizard screen had some code behind it in InstallShield’s own proprietary language. And at that time if you clicked on the back button, it didn’t remember the state you were in, which resulted in some very crazy scripting code.

Moving on to today and LandlordMax and skipping several other installation experiences, we initially started with InstallAnywhere. One of our requirements was that the installer we used also install a JVM with the local application. I don’t remember why I picked InstallAnywhere, this is about 4 years ago, but that’s the solution I chose. After a couple of years, we also started to use NSIS (Nullsoft Scriptable Install System) for our patches, which created much smaller installers (the patch installers just overwrote some files in the application directory versus a full install). I used NullSoft for the patches because it was a much quicker and simpler installation than InstallAnywhere.

At several points, we even looked at using NSIS to fully install LandlordMax, but let me tell you this is a complex endeavour! Although NSIS is a great little installer, it’s all script based. That means you need to learn another programing language. Not only that, but you need to become proficient in it do anything beyond the basics. Yes, we could learn it, copy snippets, etc., but from that point on we’d have to keep maintaining it. Someone would always have to be familiar with the language. This might seem like a small factor, but let’s say the “Installer person” quits? We have to find someone with that skill or train another person. Very expensive! Especially having gone through something similar with my first installer experience, I’m not willing to go that route again.

Since I wrote about JProfiler here on my blog, the people who make this amazing software contacted me to tell me about their installer solution called Install4J. After a few emails with them, I decided to give it a test run, and boy am I glad I did!!! They’ve created an amazing installer that’s in the same league as their code profiler! Within 1 hour I had created a brand new and fully functional installer for LandlordMax, including time to read a couple of advance features in the user manual! That’s amazing! Not only that, but if you consider the human resource costs of learning an installer like NSIS and the cost of Install4J, Install4J wins hands down!

I did mention that we were using InstallAnywhere as well. After trying Install4J, we decided to convert entirely over to Install4J and stop using InstallAnywhere. It was a good product for us at the time, but it’s now time to move on to a great product like Install4J. This is why in the upcoming version of LandlordMax later this month you’ll see a new look and feel to our installer. We’re now using Install4J for all our installers.

Why did we convert over? For several reasons. First, it was just too easy to learn and use. To do the same things I did in InstallAnywhere in Install4J takes me a fraction of the time. And I’m not the only one who thinks this way, the following thread on JoelOnSoftware has other people expressing their sentiments on the unnecessary complexity of InstallShield (same family of products as InstallAnywhere).

It’s not just the complexity of creating an installer, it’s also the ability to perform tasks. Everything seemed intuitive within Install4J. To give you another example, let’s say you want to install an application local JVM with your installer, you don’t need to go download it from their website (never mind finding it on the website which always take me a while) and put it in the right file location for the software to pick it up, they have it built right into their software. You just select the JVM version, and if it’s not there, you just press the “Download JVM” button right below which lets you pick it from a list. It then automatically downloads it, installs it, and you’re ready to go. No need to do anything more.

Install4J Bundle JVM

Another feature I really liked about Install4J is it’s ability to compress the installer itself. With InstallAnywhere last installer had grown to over 35MB in size. With Install4J, our new installer is going to be about 15MB, and this is with a bigger install on top of that. That’s more than a 50% drop in download size! This might not seem too significant, but remember that if you have thousands of people downloading your software, it sure can make a large reduction in your bandwidth usage.

Something else I really appreciated, which I have to admit I’m not as familiar with in InstallAnywhere, is the ability for it to use files relative to the project file. Why is this important? Because I can use the Install4J installer script directly within an Ant task! I build my main Jars, pick up my other Jars and resources, and away I go, all from within the same Ant script. I can now check the installer script right into CVS, and any other developer who has a license to Install4J can create their own test installers! WOW! Yes you generally don’t need to do this, but when it comes to testing an install environment versus your local environment, there’s no faster way to get the latest install than just generating it yourself within your IDE at will!

Install4J Relative Path

Another thing to realize with Install4J is that it’s not limited to just Java applications. Actually I’d say it’s amazing for Java applications, but you can use it to install any type of software. They have hooks for pretty much all types of installs. It’s just that for us, we also need the ability to install an application local JVM, which greatly limits us in terms of which installer solutions we can use. If it wasn’t for this limitation, I would still use Install4J, it does everything you need your installer to do and more. For example it has the different install modes (silent, graphical, etc.), multi-platform support, multi-language support, etc.

As an additional little tidbit of information which really excites us, from what I understand the fine people at Install4J are looking at potentially extending their API to allow hooks into your own software application for auto-updates in an upcoming version! What this means is that you’ll be able to use their knowledge and technology to allow your customers to click on an “Update” button directly within your software which will update it, without the need to download and install a patch. This is great! Yes, we could build it ourselves, and we actually did look into it. From our calculations, it would take at least 2-4 weeks, so let’s say 20 days * $1000/day (this includes salary, benefits, etc. i.e. all the costs for one developer), then our costs is about $20,000. If we can outsource this technology, assuming the highest price point, we come out ahead by more than an order of magnitude! And not only that, this is their field of expertise, their core competency, and they will maintain and update the feature for us. We could instead spend those resources building other highly valued features that are unique to LandlordMax.

Therefore, as you’ve seen, your choice of how you build your installer is important. First, it’s your first impression, so make it a good one! You only get one chance! As well, since your goal is to minimize your costs in this area, you should look at purchasing a solution rather than building a custom one. If I had to calculate the costs of a custom solution, well any of the installers available today on the market would probably be cheaper. Even NSIS, which has many copy/paste scripts available is still fairly expensive in developer time. After having used several alternatives, I’m strongly recommend you check out Install4J. This is the one we’re going to be using from now on, it’s the best one I’ve ever worked with!

Like this article?


  •     gman
    · November 20th, 2006  · 10:12 pm  · Permalink

    That looks great.

    I don’t know if this one would meet all your needs as well as Install4J but I’ve been using AstrumInstaller for years.


    It’s extremely inexpensive ($80), you can generally create an installer in minutes. It supports expansion through DLLs so if I need something complicated then I am free to add it in any language that can generate a DLL. It also supports automatic online updating for your application. It claims to support installing Java and .NET although I’ve never tried those features.

  •     marker
    · January 3rd, 2007  · 11:14 pm  · Permalink

    In your post you mentioned how NSIS is like a new programming language. Learning languages is not difficult for an experienced programmer. Every language is pretty much the same, just the syntax is a little different.

    I built a nice general purpose installer script using NSIS. I like NSIS because it is fast and they included a ton of sample scripts. You can check out my script here.

    I used the MUI (Modern UI) stuff of NSIS, which I like because it allows you to have a nice splash screen.

  •     Steph
    · January 4th, 2007  · 10:56 pm  · Permalink

    Hi Marker,

    You’re absolutely right, learning a new language is not that difficult. The thing is as a business owner, do you want to pay for someone to learn a new language, and possibly get proficient in it when you don’t need to, especially for a task that’s not done very often (how often does your installer script change once it’s done)?

    As well, remember that this training cost has to be applied whenever the “install” person changes. It’s mostly a cost/benefit issue if it’s not a big part of your business.

    The other thing to note is that your script (thanks for providing the link) is fairly small in terms of scope. It might not really look it, but ours is much more complex. For example, we actually install a local jvm with the application… I’d hate to figure out how to do all that with NSIS…

  •     FollowSteph.com » How to Save on Bandwidth Costs
    · April 16th, 2007  · 10:53 pm  · Permalink

    […] Late last year we changed the software we used to create our installer to Install4j (you can read my review on this great installer here) and it was able to drastically reduce our installer size by about 50%! Yes, that’s a full 50%! What does that mean? Well if you consider that the majority of our bandwidth is used for downloading the LandlordMax installer, then we were able to reduce our bandwidth by about 50%. […]

  •     FollowSteph.com - How To Quickly Setup a Software Development Environment
    · July 29th, 2008  · 11:04 pm  · Permalink

    […] than you might think. If you’re company already owns an installer like Install4J (which I’ve recommend in the past), then it’s a matter of an hour of someone’s time. And it shouldn’t […]

Write a reply:



LandlordMax Property Management Software

LandlordMax is the EASIEST
Property Management
Software available!
Try it for free!

Real Estate Pigeon

Real Estate Pigeon
The place to ask and answer
all your real estate questions

Blog Blazers: 40 Top Bloggers Share Their Secrets to Creating a High-Profile, High-Traffic, and High-Profit Blog!

Blog Blazers is a book that
features secrets from the
Top 40 Bloggers on the web

How to Generate Traffic to Your Website ebook

How to Generate Traffic to
Your Website
is an ebook for
to you achieve success


More resources from Stephane Grenier:
For people who work on the web
Blog Blazers
How to Generate Traffic to Your Website
The EASIEST Property Management Software available!

Copyright @2003-2024
LandlordMax Property Management Software

Disclaimer: This is a personal blog about my thoughts, experiences and ideas. The contents of this blog are for informational purposes only. No content should be construed as financial, business, personal, or any other type of advice. Commenters, advertisers and linked sites are entirely responsible for their own content and do not represent the views of myself. All decisions involve risks and results are not guaranteed. Always do your own research, due diligence, and consult your own professional advisors before making any decision. This blog (including myself) assumes no liability with regard to results based on use of information from this blog. If this blog contains any errors, misrepresentations, or omissions, please contact me or leave a comment to have the content corrected.