Click here to Skip to main content
15,885,278 members
Articles / Web Development / ASP.NET
Article

Steps for creating Custom Setup

Rate me:
Please Sign up or sign in to vote.
3.30/5 (21 votes)
27 Sep 20053 min read 230.8K   1.9K   60   38
If you ever thought creating a custom setup should be an easy task, here are the tips to break the ice.

Introduction

This is the article I wanted to find when I first began creating my custom setup. The information that I could find was broken in pieces and spread over the World Wide Web. I could only rely on parts of the algorithm and it took my precious time to figure out the actual business flow. That's why I finally decided to write this synthesis. The battle is in the custom actions and user interface sections. How do I configure a UI dialog and how can I hook the information entered in one of these dialogs to a piece of code that will do the custom configuration I want, based on this information?????

Here is an easy way to do this:

The main flow

Step 1

The best practice is to create a brand new assembly for creating personal customized steps while running the installer, namely InstallHelper-s.

Step 2

Choose your strategy:

Strategy 1

Create a console application project (I named it as InstallHelperVers1) and expect customized values in the args[] array of InstallHelperVers1 main entry point:

C#
/// <SUMMARY>
/// The main entry point for the application.
/// </SUMMARY>
[STAThread]
static void Main(string[] args)
{
    string sz1 = args[0];
    string sz2 = args[1];

    Console.WriteLine("First option = " + sz1);
    Console.WriteLine("Second option = " + sz2);
}

Build the project and add it to the file system section. Add a custom action by choosing the InstallHelperVers1application. Open the Properties window of the newly added assembly and fill in the arguments section using "[" and "]" characters. The custom dialog field values are as follows:

Image 1

where EDITA1 and EDITA2 are what you previously configured in the custom dialog textboxes in the Properties window at the Edit1Property and Edit2Property. You can leave the rest of the properties with their default values.

Results: While installing, InstallHelperVers1 will be executed with the mentioned arguments.

Strategy 2

Create a class library application project (I named it as InstallHelperVers2). Add a new item and choose an Installer class:

Image 2

Image 3

Override the OnBeforeInstall event or a more suitable event to serve your interest. Here is the MSDN example of how to do it:

C#
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;

// Set 'RunInstaller' attribute to true.
[RunInstaller(true)]
public class MyInstallerClass: Installer
{
   public MyInstallerClass() :base()
   {
      // Attach the 'Committed' event.
      this.Committed += new InstallEventHandler(MyInstaller_Committed);
      // Attach the 'Committing' event.
      this.Committing += new InstallEventHandler(MyInstaller_Committing);

   }
   // Event handler for 'Committing' event.
   private void MyInstaller_Committing(object sender, InstallEventArgs e)
   {
      Console.WriteLine("");
      Console.WriteLine("Committing Event occured.");
      Console.WriteLine("");
   }
   // Event handler for 'Committed' event.
   private void MyInstaller_Committed(object sender, InstallEventArgs e)
   {
      Console.WriteLine("");
      Console.WriteLine("Committed Event occured.");
      Console.WriteLine("");
   }
   // Override the 'Install' method.
   public override void Install(IDictionary savedState)
   {
      base.Install(savedState);
   }
   // Override the 'Commit' method.
   public override void Commit(IDictionary savedState)
   {
      base.Commit(savedState);
   }
   // Override the 'Rollback' method.
   public override void Rollback(IDictionary savedState)
   {
      base.Rollback(savedState);
   }
   public static void Main()
   {
      Console.WriteLine("Usage : installutil.exe Installer.exe ");
   }
}

Expect customized values in the Context.Parameters.Keys array. Build the project and add it to the file system section. Add a custom action by choosing the InstallHelperVers2 application. Open the Properties window for the newly added assembly and fill in the CustomActionData section using the "[" and "]" characters to specify a field and a "/" character to specify each parameter. The custom dialog field values are as follows:

Image 4

where e1 and e2 are the keys you address from your Installer class: string firstEdit = Context.Parameters["e1"];, and EDITA1 and EDITA2 are what you have previously configured in the custom dialog textboxes in the Properties window at the Edit1Property and Edit2Property, as you can see below:

Image 5

If you want to see the parameters (typed or customized) that are available for use, use this code:

C#
foreach (string keyValue in Context.Parameters.Keys)
{
  Console.WriteLine(keyValue + " = " + Context.Parameters[keyValue]);
}

It is highly important in this case to set the InstallerClass to TRUE. You can leave the rest of the properties with their default values.

Results: While installing, InstallHelperVers2 will be executed. Spot the Installer class and execute whatever is overridden in your Installer class.

Strategy 3

Repeat the steps from Strategy 2 with a few changes: Create InstallHelperVers3 as a simple Windows application project. Add an Installer class into this project. Forget all about setup dialogs and use the minimum possible dialogs in the setup project, the main and recommended ones are: Welcome dialog and installation folder dialog (and maybe customer information dialog).

For the rest of your customized steps, just follow the flow given below:

  1. Create a trycatch … transaction in your Installer class; use the catch section to rollback installation if everything goes wrong.
  2. Create a simple Windows Forms in your InstallHelper project that respects the setup main flow (Back and Previous buttons, Commit methods, etc.).
  3. Invoke these forms from inside the try section.
  4. Don't use any parameters when invoking this build during installation as you have transferred the whole business inside the InstallHelper.

Results: While installing, InstallHelperVers3 will be executed. Spot the Installer class and execute whatever is overridden in your Installer class, and that is your own setup flow.

That's it! As simple as that! From now on, use your imagination to complicate this scenario.

Good luck!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Romania Romania
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHow to validate thing Pin
AditSheth25-May-12 8:59
AditSheth25-May-12 8:59 
GeneralMy vote of 1 Pin
Robert detoi26-Nov-11 21:13
Robert detoi26-Nov-11 21:13 
GeneralYour Artcle is very Difficult to Follow Pin
Vimalsoft(Pty) Ltd22-Jan-09 2:16
professionalVimalsoft(Pty) Ltd22-Jan-09 2:16 
QuestionHow to Hide the setup when the Form1(Custom exe) is opened? Pin
Nagendran23-Dec-08 22:34
Nagendran23-Dec-08 22:34 
GeneralThank Goodness! Pin
D_Friendly_Bear22-Aug-07 19:12
D_Friendly_Bear22-Aug-07 19:12 
QuestionEnable/disable - Next/Back buttons on custom dialogs? Pin
Preky19-Jul-07 2:51
Preky19-Jul-07 2:51 
GeneralNeed Help for Custom dialog of 3 checknox button Pin
Patel Pranav15-Feb-07 1:14
Patel Pranav15-Feb-07 1:14 
GeneralRe: Need Help for Custom dialog of 3 checknox button Pin
Gelu Vac15-Feb-07 2:57
Gelu Vac15-Feb-07 2:57 
QuestionCustom Actions without default installer class Pin
JimDotNet19-Jul-06 3:51
JimDotNet19-Jul-06 3:51 
AnswerRe: Custom Actions without default installer class Pin
Danieliw5-Jan-07 3:40
Danieliw5-Jan-07 3:40 
GeneralSetup Project in VisualStudio.NET(2003) Pin
RishiMishra19-Mar-06 1:25
RishiMishra19-Mar-06 1:25 
QuestionHow to cancel (rollback) setup Pin
Kukurice6-Dec-05 3:43
Kukurice6-Dec-05 3:43 
AnswerRe: How to cancel (rollback) setup Pin
Gelu Vac6-Dec-05 20:30
Gelu Vac6-Dec-05 20:30 
GeneralRe: How to cancel (rollback) setup Pin
Kukurice13-Dec-05 3:50
Kukurice13-Dec-05 3:50 
GeneralRe: How to cancel (rollback) setup Pin
abhinish2-Aug-06 1:40
abhinish2-Aug-06 1:40 
GeneralRe: How to cancel (rollback) setup Pin
Kukurice3-Aug-06 7:47
Kukurice3-Aug-06 7:47 
AnswerRe: How to cancel (rollback) setup Pin
joncl3-Aug-06 9:05
joncl3-Aug-06 9:05 
GeneralRe: How to cancel (rollback) setup Pin
Mohammed Owais1-Aug-14 19:37
professionalMohammed Owais1-Aug-14 19:37 
QuestionCommand line Pin
Kikoz6822-Oct-05 16:19
Kikoz6822-Oct-05 16:19 
Generalfew little problems Pin
Josh Furcoat6-Oct-05 19:23
Josh Furcoat6-Oct-05 19:23 
GeneralRe: few little problems Pin
Gelu Vac6-Oct-05 22:12
Gelu Vac6-Oct-05 22:12 
Dear Sir, Mr Josh Suba or Mihai Furcoat or Josh Furcoat or Mihai Suba or whatever,
Your misterious way to by pass certain pasages from an article, email or any publication for your own protection remains a charm.

But first things first, so:
1. there's no need to always add an Installer class to your project so that you could beneficiate from a response in your custom Action sections.
Using strategy 1 you can run any executable you want to, try Notepad.exe for instance.
Just remember to add it to your Setup project.
You should test that! I did! Gives you the thrills!
More, in Strategy 1 there's no difference on how you leave the InstallerClass flag set to TRUE/FALSE. It simply doesn't metter. This should thrill you.
Test this too! I did! Gives you more thrills!
2. You are so completely WRONG, but that's no news for you, is it??
3. Of course there are so many-many things to know from deep inside Installer, but I did write there even from the begining, this is: EASY CUSTOM SETUP.
As I didn't forget to mention, this article is for people hwo first encounter a Custom Setup issue.
Also, it is correctly posted for begginer and medium levels.

I have never meant to disturb the advanced guys or brilliant minds like you keep on sustaining you have, even if people hwo actualy know you, do know that you are so far away from any position in the IT Bussiness.
This is not a forum for advanced guys only, proof that you're here present.

Your employer though must be thrilled to have you wasting his money in exchange of you infecting his company.
It's too bad, but hey! it's his money to waste.

P.S.
At least you should have registered to CodeProject using joshfurcoat@hotmail.com email address and not mihai.suba@ebsromania.ro and save yourself from embarassement.

People should know that you used to be one of the managers at EBS Romania (and my superior for a while).
And than you got dissmissed to a simple developer position because of your sociopat behaviour twords employees and also the company thought it shamefull and bad publicity to throw away like garbage one of their managers.
You still remain embarasingly stupid!
You used to work in the army and I am sure you know how to use a gun - there is still time to be saved, do everybody a favour and shoot yourself.
Yeah, and tell your simbiot to do the same.
Great company, but you're a plague and sooner or later they will do something about it.

Why can't you simply stay away and let people be???
You're like a prelonging nightmare.

QuestionHow to validate serial number Pin
Member 23311836-Oct-05 1:23
Member 23311836-Oct-05 1:23 
AnswerRe: How to validate serial number Pin
Gelu Vac6-Oct-05 23:52
Gelu Vac6-Oct-05 23:52 
GeneralRe: How to validate serial number Pin
Mukund Pujari18-Jan-06 22:11
Mukund Pujari18-Jan-06 22:11 
GeneralRe: How to validate serial number Pin
Gelu Vac19-Jan-06 20:47
Gelu Vac19-Jan-06 20:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.