Click here to Skip to main content
11,435,451 members (58,791 online)
Click here to Skip to main content

Launching Your Application After Install using Visual Studio 2005

, 11 Jul 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
Launching your application after install using Visual Studio 2005

Introduction

Creating an install MSI file is rather simple; however there is very little documentation about it, or it's choppy and sometimes too wordy. Well, the point of this article is to show you how to create the installer application, and how to make it launch your application after it has finished installing.

Using the Code

The first thing you must do is add a new reference to your main project file.

Screenshot - 1.png

Add System.Configuration.Install to your project, for some reason this has not been added automatically.

Screenshot - 2.png

Now you must add an installer class to your main project. To do this, right click on that project, go to Add, and go to New Item…

Screenshot - 3.png

Name it Installer Class.

Screenshot - 4.png

Copy and paste the following code into your application. Be sure to change the application name to that of your main project, in my case it is InstallSample.exe.

VB.NET

Imports System
Imports System.Diagnostics
Imports System.Windows.Forms
Imports System.Collections
Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.Reflection
Imports System.IO

Namespace OffLine.Installer
    ' Taken from:http://msdn2.microsoft.com/en-us/library/
    ' system.configuration.configurationmanager.aspx
    ' Set 'RunInstaller' attribute to true.

    <RunInstaller(True)> _
    Public Class InstallerClass
        Inherits System.Configuration.Install.Installer
        Public Sub New()
            MyBase.New()
            AddHandler Me.Committed, AddressOf MyInstaller_Committed
                ' Attach the 'Committed' event.
                ' Attach the 'Committing' event.
            AddHandler Me.Committing, AddressOf MyInstaller_Committing
        End Sub

        ' Event handler for 'Committing' event.
        Private Sub MyInstaller_Committing_
		(ByVal sender As Object, ByVal e As InstallEventArgs)
            'Console.WriteLine("");
            'Console.WriteLine("Committing Event occurred.");
            'Console.WriteLine("");
        End Sub

        ' Event handler for 'Committed' event.
        Private Sub MyInstaller_Committed(ByVal sender As Object, _
		ByVal e As InstallEventArgs)
            Try
                Directory.SetCurrentDirectory_
		(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
                Process.Start(Path.GetDirectoryName_
		(Assembly.GetExecutingAssembly().Location) + "\InstallSample.exe")
                    ' Do nothing... 
            Catch
            End Try
        End Sub

        ' Override the 'Install' method.
        Public Overloads Overrides Sub Install(ByVal savedState As IDictionary)
            MyBase.Install(savedState)
        End Sub

        ' Override the 'Commit' method.
        Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary)
            MyBase.Commit(savedState)
        End Sub

        ' Override the 'Rollback' method.
        Public Overloads Overrides Sub Rollback(ByVal savedState As IDictionary)
            MyBase.Rollback(savedState)
        End Sub
    End Class
End Namespace

C#.NET

using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Reflection;
using System.IO;

namespace OffLine.Installer
{
  // Taken from:http://msdn2.microsoft.com/en-us/library/
  // system.configuration.configurationmanager.aspx
  // Set 'RunInstaller' attribute to true.

  [RunInstaller(true)]
  public class InstallerClass : System.Configuration.Install.Installer
  {
    public InstallerClass()
      : 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 occurred.");
      //Console.WriteLine("");
    }

    // Event handler for 'Committed' event.
    private void MyInstaller_Committed(object sender, InstallEventArgs e)
    {
      try
      {
        Directory.SetCurrentDirectory(Path.GetDirectoryName
		(Assembly.GetExecutingAssembly().Location));
        Process.Start(Path.GetDirectoryName(
          Assembly.GetExecutingAssembly().Location) + "\\InstallSample.exe");
      }
      catch
      {
        // Do nothing... 
      }
    }

    // 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);
    }
  }
}

After changing the project EXE file in the source code that you just pasted, be sure to recompile that project.

As you can see from the code, you added a new interface to the class that allows you to take control of the Install, Commit, Committed, and Rollback. In Committed, I am going to launch the InstallSample.exe application.

When it is time to create your install project, you will want to add a new Setup Project to your existing applications solution.

Screenshot - 5.png

Right click on this new project, then click Add, then go to Project Output…

Screenshot - 6.png

Select Primary Output, then click OK.

Screenshot - 7.png

Add a shortcut in the Start Menu… Right click on the Setup Project, then go to View, and then File System…

Screenshot - 8.png

Click on Application Folder, then right click the Primary Output file, and then go to Create Shortcut to Primary Output from InstallExample (Active):

Screenshot - 9.png

Add a new folder to your start menu, right click on User's Programs Menu, then go to Add, and then Folder. Rename that folder to Installer Example.

Screenshot - 10.png

Now drag that shortcut you created in the Applications Folder, to the new folder you just created:

Screenshot - 11.png

Right click on the new solution; go to View, then Custom Actions:

Screenshot - 12.png

Add a new custom action to the root Custom Actions node:

Screenshot - 13.png

Double click Applications Folder:

Screenshot - 14.png

Then click Primary output from InstallExample (Active):

Screenshot - 15.png

Lastly, rebuild your install solution.

Screenshot - 16.png

It is a good idea to keep an eye on the status bar, it will tell you when it is done…

Screenshot - 17.png

Now you can test it and it should install the application. After the install process, it should run automatically.

History

  • 11th July, 2007: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Bill Daugherty II

United States United States
No Biography provided

Comments and Discussions

 
Questionmy 5 Pin
Shambhoo kumar20-Jul-13 0:15
professionalShambhoo kumar20-Jul-13 0:15 
QuestionGood Post. Pin
Ranish kumar1-Nov-12 2:33
memberRanish kumar1-Nov-12 2:33 
QuestionThank you! Pin
Ehud Grand12-Jan-12 1:48
memberEhud Grand12-Jan-12 1:48 
QuestionThanks Pin
qhuydtvtv27-Dec-11 0:45
memberqhuydtvtv27-Dec-11 0:45 
GeneralMy vote of 5 Pin
lopezatienza15-Nov-11 3:31
memberlopezatienza15-Nov-11 3:31 
Questionto solve problem "can not find $path\projectname.intallstate" Pin
hacklew16-Aug-11 17:05
memberhacklew16-Aug-11 17:05 
GeneralMy vote of 5 Pin
EAlger25-May-11 11:21
memberEAlger25-May-11 11:21 
GeneralMy vote of 5 Pin
jonty chaudhary25-Jul-10 3:03
memberjonty chaudhary25-Jul-10 3:03 
Generalthanks a lot Pin
sortgnz13-Jun-10 22:26
membersortgnz13-Jun-10 22:26 
GeneralJust what I wanted Pin
Member 34005328-Dec-09 5:37
memberMember 34005328-Dec-09 5:37 
GeneralInstallation : Error 1001 Pin
SohelElite6-Oct-09 22:09
memberSohelElite6-Oct-09 22:09 
GeneralSP1 doesn't work ?! ?! Pin
UBX7-Sep-09 3:53
memberUBX7-Sep-09 3:53 
QuestionHow to show the help file after installation Pin
Nicolas Stuardo18-May-09 5:25
memberNicolas Stuardo18-May-09 5:25 
Generalthanks Pin
himanshu11015-May-09 19:29
memberhimanshu11015-May-09 19:29 
QuestionI got two erros when building Pin
alemos23-Feb-09 9:21
memberalemos23-Feb-09 9:21 
QuestionHow to modify MSI file? Pin
jp2code3-Feb-09 4:32
memberjp2code3-Feb-09 4:32 
Hello Mr. Daugherty,

I realize this does not fit perfectly with your topic, but it is very close: I have a Client that requires the installer I create for him display two (2) license agreements whenever the Installer is being run.

I've tried asking questions, and the closest answer I got was to edit the MSI file with Orca.

I've opened my MSI file with Orca, but I don't know what to do next - there is painfully little information on how to access the database within an MSI file, and I don't know how or where I should modify the MSI file to include a second license agreement.

Could you supply some information on this? Or possibly point me in the direction of a good tutorial?

Regards,
Joe
Generalrun AFTER install? [modified] Pin
Ariadne14-Oct-08 5:55
memberAriadne14-Oct-08 5:55 
NewsThank you very much. Pin
zoidbeck7-Jul-08 3:04
memberzoidbeck7-Jul-08 3:04 
AnswerProper Way to Do This Pin
Robert Prouse23-Apr-08 5:34
memberRobert Prouse23-Apr-08 5:34 
GeneralRe: Proper Way to Do This Pin
rhennecke24-Apr-08 22:26
memberrhennecke24-Apr-08 22:26 
AnswerRe: Proper Way to Do This [modified] Pin
dmbrider28-Sep-08 11:39
memberdmbrider28-Sep-08 11:39 
GeneralRe: Proper Way to Do This Pin
vish11123-Oct-08 1:37
membervish11123-Oct-08 1:37 
GeneralRe: Proper Way to Do This Pin
RammohanT11-May-10 23:54
memberRammohanT11-May-10 23:54 
QuestionRe: Proper Way to Do This Pin
ROCNDAVE21-Jan-10 12:31
memberROCNDAVE21-Jan-10 12:31 
AnswerRe: Proper Way to Do This Pin
dmbrider24-Jan-10 6:08
memberdmbrider24-Jan-10 6:08 
GeneralRe: Proper Way to Do This Pin
Tarzaan22-Jul-09 4:41
memberTarzaan22-Jul-09 4:41 
GeneralShow double windows Pin
Sailung2-Mar-08 17:53
memberSailung2-Mar-08 17:53 
GeneralRe: Show double windows Pin
Bill Daugherty II2-Mar-08 18:31
memberBill Daugherty II2-Mar-08 18:31 
GeneralRe: Show double windows Pin
Sailung2-Mar-08 22:12
memberSailung2-Mar-08 22:12 
Generala simpler method Pin
dmihailescu21-Nov-07 11:23
memberdmihailescu21-Nov-07 11:23 
GeneralRe: a simpler method Pin
bojingo28-Nov-07 11:04
memberbojingo28-Nov-07 11:04 
GeneralRe: a simpler method Pin
UBX7-Sep-09 4:55
memberUBX7-Sep-09 4:55 
GeneralRe: a simpler method Pin
Mihai P10-Dec-10 13:12
memberMihai P10-Dec-10 13:12 
Generalnot really "after install" Pin
gliugliu1-Oct-07 14:12
membergliugliu1-Oct-07 14:12 
GeneralThanks Pin
timhenstridge16-Sep-07 21:49
membertimhenstridge16-Sep-07 21:49 
GeneralSimple and Understandable Pin
abhishek.mumbai7-Aug-07 3:25
memberabhishek.mumbai7-Aug-07 3:25 
GeneralThank you!! Pin
logan133728-Jul-07 9:11
memberlogan133728-Jul-07 9:11 
GeneralRe: Thank you!! Pin
Bill Daugherty II28-Jul-07 9:18
memberBill Daugherty II28-Jul-07 9:18 
GeneralFWIW here's the J# equivalent Pin
methan23-Jul-07 8:03
membermethan23-Jul-07 8:03 
GeneralOne Question Pin
booster2320-Jul-07 5:41
memberbooster2320-Jul-07 5:41 
Generalthanks Pin
fyitang18-Jul-07 1:27
memberfyitang18-Jul-07 1:27 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150428.2 | Last Updated 11 Jul 2007
Article Copyright 2007 by Bill Daugherty II
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid