Creating a MSI for Java code - windows

We have written a bunch of Java code and need to package this code in MSI so that we can deploy on user's Windows machines.
The MSI should:
Install our class files at appropriate location
It should also add a task in Windows task scheduler
I was looking at http://www.advancedinstaller.com/. It seems to be the perfect tool for my case, except it's not free to add the scheduled tasks in the MSI. I will have to buy their license to use that feature, which doesn't fit into our scheme of things.
http://nsis.sourceforge.net is free and looks good but has a steep learning curve.
How do people normally achieve this? Obviously not everybody will be buying this tool. What are the other options? Are there any other such free/open source tools?.

I believe the Advanced Installer guys are known to offer discounts for such cases, try contacting them by email.
Regarding NSIS, it depends on how much effort you're willing to put in the maintenance.
From the same category, there's also WiX. Also steep learning curve.
Installer kits are usually something you edit once a month or once every new version of your product. I find that in between those periods I tend to forget stuff, so having an intuitive and easy to use editor definitely helps, and free tools aren't really known for that.

One benefit of NSIS is that is has a wiki that covers most of the basic and some advanced topics needed for the language. It is quite powerful, but EddieBytes is correct about the learning curve.
I started using it for my package and application installation needs a while back. It took a little bit to get moving, but once I did it became my preference.
Here's the NSIS wiki

Related

Recommendation for Windows-based installation library

I've used WiX, InstallShield, and other installation generators and have experienced nothing but headaches.
Are there any installation libraries out there that can be linked in to an actual C++/C# program and run as a setup executable and doesn't need to be written in a custom declarative-installation-language ala WiX/InstallShield?
Edit:
The problem is putting complex decision logic in WiX is tedious. Debugging custom actions is a nightmare and debugging managed CAs is even worse. Our CAs need to execute on remote machines due to AD requirements which adds even more hell to the debugging process. When I sit back and ask "What is WiX giving me" the answer is "very little". I'm spending most of my time fighting the WiX system than improving/maintaining. If a library exists that gave transactional file/registry entry support and focused on installer-related functionality, that's what I want.
You're not saying the exact problems you encountered, but you seem unhappy with the usability of the tools you tried. I recommend trying other setup authoring tools to see which one fits your needs best. You can find a list here: http://en.wikipedia.org/wiki/List_of_installation_software
As a rule of thumb, free tools are hard to use but get the job done and commercial tools are easy to use but they are not free.
Regarding your actual question, no there aren't any installer libraries you can use in your application. You will find only installation engines. You basically choose between Windows Installer (MSI packages and Active Directory support) and proprietary engines which may or may not work the way you want.
When you can live with support for your installer to Windows Vista+ then you should have a look at the Transaction support of Windows for the registry and NTFS. A very good overview can be found at CodeProject.
Yes MSI is very complex but I do think many of your headaches originate from the fact that you are trying to do too much during install.
There is a time to do stuff after installing your software. This time is called first startup where you can do complex things like AD deployment with a user interface that is under your full control which is much easier to debug. But I doubt that you will get rollback support done for failed AD changes.
A rule of the thumb is that you should not change the AD schema to make your software happy since many customers do forbid schema changes. Manager should read this as: You will loose customers due to AD deployment issues. IT admins can have a big influence what software is bought and which not.
If you had problems with MSI it is likely that you hit a wall with not working updates due to unintended MSI component violations. I have done a small writeup about the issues I have encountered so far. There are also many issues lurking with combined x32/x64 installations.

Preparing installers suitable for Microsoft System Centre Deployment

Update: 24 Mar 2011:
Just wanted to add that I've had a look at WIX now and it looks great, I can see very clearly now how to get a nice sleek MSI based installer done that should do everything we need. Thanks very much for the assistance, much appreciated.
We deploy a product which has both server and client components. The client is currently a VB6 application (yes, yes I know...) and it uses an InstallShield installer to produce an EXE that we give to the client to go and deploy on all their workstations.
That's all fine and dandy when there are ten, but when there are 100 they understandably get a bit grumpy :)
Some of our customers are using Microsoft System Centre to automate their software roll-outs and they have asked us to get our client compatible with this so that they can deploy automatically.
I have no experience with System Centre, so while i'm trying to build up my own experience I thought i'd drop a question in here and see if some of you experts could help accelerate the process.
Basically, what do I need to produce in order to have an installer that is good for deployment automatically via Microsoft System Centre?
I think i've found out so far that it needs to be an EXE, an MSI or an MSP.
As I've said, our current installer is an EXE - however it has a fairly standard wizard installer that pops up graphical stuff and asks the user to click next a couple of times. Is that causing a problem? Or should it just work? Or, is it a case of adjusting the InstalAnywhere script to make it fully automated (the UI doesn't really need to be there) ?
I should add that I don't actually know if anyone has tried this and whether the customer question is purely "let me know if it will work" or if they've tried it and it doesn't work... I'm probably heavily leaning towards the latter because I know at one site they've got what seem like knowledgeable IT that are keen to just try things and see what happens rather than constantly waiting for approvals etc.
Lastly a few things off the top of my head...
App is written in VB6.
InstallShield is quite old, i'm currently finding out what the version number is and will update the ticket as required.
Target platforms are Windows client, currently up to XP officially but it does work ok on Windows 7 and Vista.
I'm happy to use a totally different installer if that's the best answer, we're not tied to InstallShield at all, it's only really there for legacy.
Please let me know if I can provide any more detail!
Matt.
This question is very broad so there isn't one answer I can give. Basically I spent 15 years experience writing installers and 2 of those years were on the other side of the house at Continental Airlines ( 18,000 seat AD forest ) receiving installers from companies like yours.
Our goal was to be able to silently provision and service software through SMS. Ideally we prefer to receive MSI's because they are in a standardized format and are customizable through the use of transforms. When we would receive non MSI packages we would typically "repackage" them into MSI format. This is a process in which the package is ran through snapshotting / capture tools and the whole thing is reverse engineered and refactored into MSI.
But we didn't always do this. On a (rare) occasion we would receieve a higher quality then average EXE that was 'good enough'. The goals are clear: We must be able to install and uninstall the EXE from the command line with 0 touch by a human. We must also be able to script any configuration settings such as database server name.
If we could do those things and the impact seemed low risk, we'd accept it as is. Otherwise we went about our business of taking it on ourselves.
On occasion I would create an installer that was so clean I would think "Man, I wish ABC Software Company had done this themselves." ( Of course I wouldn't have had a job... ) or "I wish we could partner with ABC to contribute this install back to them for everyone else to share in the benefits."
Maybe one of your sites has a really good install guy and you could work something like that out on the cheap. Otherwise I suggest learning MSI and it's best practices and doing a rewrite of your installer.
It was a great experience being at Continental and I now make sure that all of my companies installs won't bring such pain to their customers.

WAMP easy setup installer?

Is there any way to make an installer that is very user friendly?
I know it's impossible for a Next Next Finished installer but what can I do to ease the process?
Windows platform.
Thanks in advance.
If you've got a very simple application and basically just need to copy a few files, I'd suggest looking at NSIS. It's very simple and you can probably have an installer done in a couple of days.
If you're developing software for a corporate environment where network rollouts are a priority, then you'll probably want to take a closer look at Windows Installer and Windows Installer XML (WiX). (Warning: a very steep learning curve - you'll want to set aside a few weeks and probably read this book to help get started)
If you want the benefits of MSI, without the hassle of learning the underlying technology then a commercial tool such as Installshield is your best bet. It's not cheap but you'll get something out the door pretty quickly.
Long term I'd advise learning Windows Installer technology. It's something overlooked by most developers, it's often seen as crazy voodoo that is overly complicated and unnecessary, in reality it's rather quite simple, just a database with a whole bunch of rules, conditions, and quirks that take a bit of getting used to :)
Try BitNami WAMPStack it is open source and free (you also have Linux and OS X versions)
If I understand your question correctly, I'm not sure how you didn't find this already...
http://www.wampserver.com/en/

Buy or Build for web deployment? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I have been evaluating the wide range of installation and web deployment solutions available for Windows applications. I will just clarify here (without too much detail, these tools have been covered in other questions) my understanding of the options:
NSIS - Free tool that generates setup executables. Small binary. Specialized, sometimes obtuse, scripting language.
Inno Setup - Free tools for setup executables. Various binary compression schemes. Pascal scripting engine.
WIX - Free toolset to generate MSI binaries. XML definitions language.
WIX ClickThrough - Additional tools for packaging, web download and auto update detection (now part of WIX core).
InstallShield - Commercial development environment for installation packaging. Generates MSI binaries. C-like InstallScript language.
Wise - Commercial development environment for installation packaging. Generates MSI binaries.
ClickOnce - Visual Studio supported framework for publishing applications to a webserver, with automatic detection of updates. No support for custom installation requirements (INI files, registry etc ...). Packages setup as an MSI binary.
Install Aware - Commercial development environment for installation. Generates MSI binaries. Automatic Update framework (Web Update).
If I have missed any, please let me know.
And found some useful discussions of these technologies on StackOverflow:
Best Simple Install System
Best choice for Windows installers
Alternatives to ClickOnce
I have worked with a few of these solutions, as well as a handful of proprietary internal installation solutions. They are mostly concerned with packing installations and providing a framework for developers to access the run time environment. With the growing requirement for web deployment and automatic software updates, I expected to find more of a consensus among developers on a framework for web delivery of software and subsequent updates, I haven't really found that consensus. There are certainly solutions available (ClickOnce, ClickThrough, InstallShield Update Service), but they each have considerable limitations (please correct me if I mis-represent any of these). I would be interested in a framework that provided some of the following:
Third party hosting/management of updates.
Access to client environment (INI files, registry, etc..).
User registration/activation.
Feedback/Error reporting
This is leaving me with the strong impression that the best way to approach the web deployment problem is through a custom built proprietary solution (possibly leveraging existing installer packaging). I have seen this sort of solution work well for a number of successful applications:
FileZilla - HTTP request to update.filezilla-project.org to check for updates, downloads an NSIS binary (I think) and then shuts down to run the install.
Automatic updates for Massively Multiplayer games are entirely necessary and universally implemented using proprietary systems.
So, at last, to my questions:
Have I missed a web deployment framework that will provide the functionality I need?
Are my requirements too specific to reasonably expect a third party framework to deliver?
Should I buy or build?
I would urge caution on Installaware. We recently had a shocking experience with their customer support.
We followed one of their sample projects to the letter which failed miserably. Raised a support ticket with customer support and were told it was going to cost us $199 for them to look at fixing their own code.
We then raised the same issue in the user forums and were promptly banned because this constituted cross posting and was not allowed. Even though this is not mentioned in their terms and conditions. In fact, they banned our IP so no one in our company can post to the forums.
A very poor experience and one we wont repeat. We are now looking to replace Installaware as soon as possible.
Purchase Installaware at your own peril.
Absolutely agree with poster who said to stay away from InstallAware. They've had a long history of really absurd ethics problems, and they treat their own customers horribly. They can be downright abusive and insulting.
Beware InstallAware!
I completely agree about InstallAware.
After using WiX, NSIS and InstallAware, I have to humbly admit that they were all overkill for what I really need as a software developer. There are no projects that I've done so far which couldn't be deployed using the Visual Studio deployment project.
Is it limited? Yes.
It is also very simple to learn an use. Moreover, you actually can do really neat things like automatically create patches (.MSP files) by using techniques as described here
I fully understand that you can't do everything inside of a Visual Studio setup project, but it's rather surprising what you can accomplish. It's free, it's easy and, frankly, for general use is a better option than spending endless hours learning WiX's mind-boggling XML (impressive as it is), or InstallAware's verbose scripts...
With VS Setup, it's drag'n'drop & build'n'deploy. Every other solution I've tried had set backs... they can't automatically detect your project output... or need special filters so as not to include unwanted outputs from the build.
My suggestion is thus: If you simply wish to get your project deployed, then learn:
How to build a custom installer class, and
How to author your own pre-requisite packages
These are both reasonably easy skills to master, and satisfy the needs of most developers.
If your specific requirements are core to your business; ie part of your business is to provide a smooth and user-friendly deployment/installation and you feel that none of the available deployment libraries can let you achieve this, then certainly go ahead and build your own.
If your specific requirements would be nice to have but they do not make a significant part of your business; ie the end user will not typically be expecting or needing a smooth installation procedure, or will never need to do that themselves (ie they pass that step onto their IT department), then the need to build your own just for your own specific requirements is likely to be outweighed by the extra effort that would involve.
I think that your impression that you will be needing a custom solution is a sound one; it seems like your requirements are going to be key to the experience of your product, especially if you need really smooth automatic updates and feedback.

Best Windows Installation file Creator? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I'm not the best programmer so I found it was much easier to write a program as several separate executables, which occasionally call each other. But now I need an easy way to actually run them without writing detailed instructions like Run file one, wait until its completed and no longer in process manager before running file two, file three can be executed 15 seconds after file two has been created. Then Add a key to your registry. Etc. I figure there must be a good software out there where I can just drop all my exes in, tell it when to run them, and output one file for my clients to run. Any ideas?
Inno Setup is easy to use, free, open source and scriptable if you need it.
I've always had a good experience with NSIS
It's open source
It has a big community (and hence lots of plugins)
For simple things, its script-based approach is nice and easy
It's lightweight and fast
On the downside, if you want to do something more sophisticated, you need to use something that looks a bit like assembly language - very odd, and not particularly pleasant. Thanks for the comments about that - I'd forgotten all about it!
Inno Setup is simple, light-weight and covers a lot of ground. I've used it for 5-6 apps over the last 5 years and it never let me down. Highly recommended!
Before that I used InstallShield, which is one of these systems that are so complicated that they "offer" you to "utilize" their "professional services" to create your installations. In other words it's kind of a hack that only managed to build a customer base in the childhood of Windows because there was no competition. It's a bit like a 747 that runs like a Trabant.
The worst, by far, installer product I've worked with is "WISE for Windows Installer". This had me literally smash my mouse in the office floor in frustration. It is (or at least was, 4 years ago) utter crap and should be avoided at all costs. This is exactly the kind of software that those pesky license agreements are there for, else the publisher would be sued into oblivion...
Yes, two ideas:
If you're looking for a way to statically put files, registry keys, start menu shortcuts, et cetera on your customer's systems, you should be looking for an installer solution. Many of these exist, and choosing the best one mostly comes down to features and pricing. I happen to like Caphyon's Advanced Installer, and it does have a freeware version that looks like it might meet your needs, except for the ability to run executables at scheduled times (which would require the Windows Task Scheduler support only found in the Enterprise edition, which is in the ultra-expensive price range, comparable to InstallShield...)
If controlling the flow of events on your customer's systems is more important than getting the executables on the system, you may want to look into Automise, which is basically an ultra-friendly UI for creating scripts, which makes things like scheduling tasks quite easy.
Anyway, you can download trial editions of both pieces of software, to see which one (or possibly both) will allow you to do what you want in the easiest way, or at least give you some ideas on how to best serve your customers. It may turn out that simply adding a new, 'supervisor' executable to take care of registry keys, scheduling, etc. could solve the problem without any third-party add-ons...
WixEdit is an open source (install shield like) authoring tool that uses the Wix Runtime from Microsoft.
Wix Tutorials
If you don't have any specific requirements apart from being able to install a few executables, then basically anyone will do. I'd recommend NSIS, not because it is particularly easy to work with (it has a cumbersome assembly-like language which isn't to practical to do more complex things in), but because it is free, has a large and active community, and it generates fast installers with very low overhead. As an extra bonus, you can run the compiler (i.e. the tool which generates the installer) on Linux.
Edit: ...and whatever you do, do NOT use InstallShield.
The ones I've worked with are:
InstallShield
NSIS
INNO Setup
Custom created installer
My preference is INNO Setup. It's free, it's easy.
I heart wix, MSFT's open source, declarative (XML) based toolkit for building MSIs.
It's ace.
If you want to install binaries, add reg keys and even run "custom actions" (have your own code execure during install) you should have a look at it. Then you'll have a one-click (msi) solution. Good eh?
Definately Wix. :)
Wix allows you to do the most things with ease and the difficult things without hacks, it's free and open-source.
You can use Wix within Visual Studio (using Votive) or you can use it using the .Net SDK, MSBuild and your favorite XML editor. Wix supports creating MSI installers, MSP patches, MSM Merge modules, Wix libraries and much more.
You should take a look at InstallJammer. Not only is it free, it's cross-platform and very easy to use. Most common actions don't require any scripting at all, but with a powerful scripting language underneath the hood, you can make an install do just about anything you want.
If all you want is a basic installer to install your application, you can have it built in a matter of minutes from the first time you start it up. If you want something more powerful, the capabilities and documentation are excellent.
If you're not after an installer (which is doesn't sound like you are) Why not just write a program to do what you need?

Resources