• Forum
  • Lounge
  • How to get a program ready to be shipped

 
How to get a program ready to be shipped?

Pages: 12
Hi, I'm not sure if I'm writing this in the right forum, but how do you set up a piece of software that you wrote to be shipped? How do you get it to be set up on another person's computer when they buy the software? How do you package up everything your software needs to run properly? Any responses or links to sites that address these questions would be appreciated.
It depends entirely on how you built your software. The vagueness of your questions makes me think you don't even understand how you built your software in the first place - you should know what it needs.
I know it depends on how the software was built in the first place. I'm just wondering how you package it (files, other necessary things) together. And how do you create a "set up" executable so users can have it unpacked and runnable.
You could use a simple zip, or you could use a program like Install Creator to make an installer, or you could write the installer yourself. Have you never installed software before?
Last edited on
Inno Setup
'Nuff said.
http://www.jrsoftware.org/isinfo.php
I've installed software before. I was just wondering how someone was to make a good installer for their software.
This is a question that really shows that you're ignorant of programming.

You don't "package" software, or even "install" it. All installers do is change or add registry values that the software depends on, or does some other things to set up an environment the software can run in (such as checking for external dependencies, etc...)

You can "install" the software manually, or, if it creates the files and registry values it needs, then an installer doesn't need to be written.

In short: you need to know exactly how the program runs, and what it's runtime dependencies are.

Ps: excuse any errors in spelling, I'm writing this on my tiny ipod.
This is a question that really shows that you're ignorant of programming.

not really... programming has nothing to do with packaging software. i am not "ignorant of programming" and i dont know how to do it.
I find it easy to get software to run on my own system. But to get it to run comfortably on another persons system who's environment you can't modify is tricky business. For Linux especially, you often just don't ship a whole bunch of libraries with the binaries. Also, different systems may have different file locations. There are various tools to do this for you but finding one that suits your needs might be difficult. Inno Setup isn't bad for windows. For linux, you'll often distribute source and have a makefile or script independent of the package manager to install into a root directory (often /usr/local by default).

This is a question that really shows that you're ignorant of programming.

Actually, I still don't know much about the install process on various platforms, although the concept is the same all around. Not to be over confident, but I'm pretty sure you'd be lying to say I'm ignorant about programming, just because I question about installing files on a given platform.

Also, you say,
you don't "package" software, or even "install" it
, then give an almost exact definition of what the word install means. Maybe you mean something different? I think you should change your post.
I second Inno setup. It's very easy, and works really well. I use it to package my files and spread them across the various installation configurations called "components". You can run scripts through it, set environment variables, or set registry keys.
If it's a moderately simple program you're wanting to install there's a program already built into Windows called IExpress, I'm not exactly sure how good it is because I've never used it myself but it basically creates a self extracting archive with the option to run a command after installation.

It seems like it could be decent, but I haven't got a clue whether it lets the user choose where they wan't to extract to or not (I imagine it should do), although if you need any registry values (or anything else important to environment setup) you'll need to make a little program to do that for you and pack it inside the installer and set the "command" to open that program executable after extraction.

EDIT: Just remember that this does only create a self extracting archive, so if your program is dependent on libraries already on your PC (i.e. DirectX 11.0 or such) that aren't available on the target PC then they won't be installed automatically unless you've included a DX installer explicitly in your archive and had your launching program start the install if required.
Last edited on
Inno Setup is cool to play around with but when you get down to it Orca has about the same learning curve. I know it's going to be seen as an unpopular opinion here but this: http://www.jrsoftware.org/isfaq.php#msi is what led me to decide that Inno Setup was inadequate. Integration with the Windows Installer service means a Win32_Product class instance for your application will be created when it is installed. This allows other packages to interface with your application through the COM\COM+API, VBScript or the .Net Framework and allows remote administration of your application through the WMIC. It opens the door for your application to use more tools then you would ever think is necessary, mostly because about half of them aren't.

@ IWishIKnew: Regarding this line here:
... if it creates the files and registry values it needs, then an installer doesn't need to be written.

You do know that the registry is not meant for temporary storage right? Also, depending on what keys you're poking around in, you probably need to elevate the process to do this. Requiring Administrator privileges and having to confirm the UAC pop-up every time the end user runs your application just to save the developer the day or so it takes to write an installer is brain dead logic. All that set aside though, if what ever you are doing has you to poking around in the Windows registry then you are doing it wrong.
Last edited on
@Computergeek01 saisd:
You do know that the registry is not meant for temporary storage right?


If it's meant for temporary storage, I don't see how it gets to be such a clusterfk after about a week. When I had windows, the registry was used for everything but temporary storage: I had to clean that thing out every week just to keep it from screwing up my system. If that is Microsoft's definition of temporary storage, then somthing is deeply wrong.

NoXzema said:
then give an almost exact definition of what the word install means


That comment was made to clear up any confusion. Judging by the OP's rhetoric, he sounds like he thinks there is some sort of automagical button to click that creates some sort of magical installer. I was just clarifying that to install doesn't mean to click a button, that the word doesn't describe an action, but a process which results in an environment that a program can run in.
IWishIKnew wrote:
If it's meant for temporary storage, I don't see how it gets to be such a clusterfk after about a week. When I had windows, the registry was used for everything but temporary storage: I had to clean that thing out every week just to keep it from screwing up my system. If that is Microsoft's definition of temporary storage, then somthing is deeply wrong.
How did you read Compuergeek's sentence and quote it and still miss the word "not" both times?
@ IWishIKnow
Judging by the OP's rhetoric, he sounds like he thinks there is some sort of automagical button to click that creates some sort of magical installer.


I know there is no "automagical button" that someone could click to make a magical installer. I wanted to figure out how to make an effective installer for my piece of software that would install the software and have it run as expected for the target audience of the software. I would also like to know how would you make an installer that was capable of installing over different OS. Also, I would like to know how to set up the executable for said software.
I would also like to know how would you make an installer that was capable of installing over different OS.

In order to accomplish this one you need to think about this problem differently. There is naturally some difference of opinion about how to go about it; but personally the most effective method I've seen is MAKE\CMAKE. This isn't a package that makes an installer, this is kind like a framework that writes the code specifically for the platform it is run on based on certain environment variables. The consumer then compiles that code for their system (this part can be scripted for the end users convenience but for some reason it normally isn't). Some people will tell you to just use a framework that is already cross platform, like boost::ASIO for instance, but what I find cool about MAKE\CMAKE is that if you're willing to put the work in then it will also account for differences in the versions of these frameworks between the host machine and the projects development platform. Unfortunately this isn't a simple task, it borderline makes sense to have a dedicated team for your projects makefile.
I would also like to know how would you make an installer that was capable of installing over different OS
If you need an installer, without need to compile, search for libraries of something else, you can do something like:
Write small program in Java only purpose of which will be to detect user OS and download/launch from disc corresponding installer.
Or create an offline html page, detect OS from User-Agent and do the same: there could be people without Java, but I do not think you will find anyone without web browser.
@ MiiNiPaa: That HTML solution is slick, I am truly impressed with the pragmatism it shows. But modern browsers are configured not to allow outside calls by default even for local intranets. So what would be step 2? A pop-up telling them which installer to run?
Like installing almost every browser: you open web page, it detects you OS and you just need to press "Save" and then run "downloaded" from local storage installer.

I did not test it, but I think it should work.
Pages: 12