Article Options
Premium Sponsor
Premium Sponsor

 »  Home  »  Deployment  »  Installer Class and Custom Actions  »  Page 2
Installer Class and Custom Actions
by Arnaldo Sandoval | Published  10/15/2007 | Deployment | Rating:
Page 2
  1. Delete the default Class1.cs object from the MyInstallerClassDll project by expanding the Solution Explorer, right click on the Class1.cs object and select the Delete option.

     

  2. Enter the code window for MyInstallerClass object, it should be something like the code below:

    Code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;

    namespace MyInstallerClassDll
    {
        [RunInstaller(true)]
        public partial class MyInstallerClass : Installer
        {
            public MyInstallerClass()
            {
                InitializeComponent();
            }
        }
    }


That's it, those are the steps to create an Installer Class. As you can see it is inheriting from the Installer abstract class, and because of this, several installation events are exposed for you to override, like:

  • Commit
  • Install
  • OnAfterInstall
  • OnAfterRollback
  • OnAfterUninstall
  • OnBeforeInstall
  • OnBeforeRollback
  • OnBeforeUninstall
  • OnCommitted
  • OnCommitting
  • Rollback
  • Uninstall

All these events come to life when your installer class object is assigned as a Custom Action to a Deployment Project. These events by default are empty and you should code the logic to the ones required by your deployment project.

There are some unwritten rules and unpleasant features when using these events imposed by the way Deployment Projects behave at run time.

The sequence these events are raised is shown next:



Play attention to the facts: (a) untrapped exceptions on the OnBeforeInstall event will not trigger any of the Rollback events; and (b) you may reach the Rollback events from anyone of the installations events.

UN-WRITTEN RULES

  • All these events should be bullet proof without throwing unexpected exceptions, if anyone of these methods throw an exception the installation or uninstallation request will fail.
  • It does not make much sense calling the Rollback event in the middle of a different event; you should implement these events independent of each other, your installation class may have common methods shared by these events, but cross calling installation related events are risky business.
  • Practice extreme caution when coding the Uninstall event, failure to do so may render your application un installable.
  • If you are using the savedState event's variable (more about this variable later), you should assign your installer class to all the Custom Action's modes (Install, Commit, Rollback and Uninstall) in the Deployment project.
  • Your installer class should not reference classes located outside its assembly because there is no way to know if those assemblies will be available (installed) at the time you reference a class or method from an external assembly.

UNPLEASANT FEATURES

  • None of the deployment project's properties is automatically available within your installer class.
  • Your Installer Class could be instantiated several times by the Windows Installer (installation) process, for this reason you can't rely on global variables to keep track of its different stages, that's why you should use the StateSaver and SavedState objects explained later on this article.
Comments    Submit Comment

Comment #1  (Posted by jipfromparis@hotmail.fr on 10/23/2007)
Rating
Very instructive. Just a point, its always a good idea to take globalization into account. Network service account name is OS language dependent. Thus, on page 4, the first parameter for FileSystemAccessRule constructor should be :

new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null).Translate(typeof(NTAccount)).Value

The above line requires using the System.Security.Principal namespace. This said, thanks again for this article.
 
Comment #2  (Posted by an unknown user on 11/20/2007)
Rating
Great! Short but detailed. Thanks
 
Comment #3  (Posted by an unknown user on 11/21/2007)
Rating
Good One.
 
Comment #4  (Posted by Gil Yoder on 11/29/2007)
Rating
Just what I've been looking for! You won't believe how hard it was to find a good explanation of customer actions. Thanks!
 
Comment #5  (Posted by Iván Gracia on 12/14/2007)
Rating
Hi! Great article! Came across it while searching for a way to include a custom action that asks the user whther he wants to empty the install folder or not on uninstall. Is possible to do this with Orca? How can I add a custom action to an installer project, but only the uninstall part?

Thanks in advance!
 
Comment #6  (Posted by Arnaldo Sandoval on 12/14/2007)
Rating
Hi Ivan, it seems the answer to your question is on page 3, you can assign the custom action to the UnInstall action; if you want to talk about it, why don't you join VbCity (www.vbcity.com) and post a question there. I will be glad to help; my user name there is rock.

Cheers,
 
Comment #7  (Posted by Jimmy Huang on 12/25/2007)
Rating
Very useful
 
Comment #8  (Posted by an unknown user on 12/28/2007)
Rating
It was a brilliant explanation. Before this article I didn't understand how it worked, and I couldn't find a good explanation anywhere else.
 
Comment #9  (Posted by an unknown user on 01/15/2008)
Rating
Trapping the mouse within the form seems like a hack which will not work in all cases. Any other ideas?
 
Comment #10  (Posted by Arnaldo Sandoval on 01/15/2008)
Rating
I agree with you regarding the issue with the mouse, and the way it is handled; I had two options at the time I wrote the article (a) make the community aware of the problem, giving a possible workaround or (b) exclude any reference to the odd behaviour, which will frustrate those following these directions; I think that option (a) better services the community, if anyone knows a better way to resolve the mouse issue, please post the code or email it to me, I will gratefully amend the article with a recognition note to the person assisting me with the issues.
 
Comment #11  (Posted by vhjraerhlj on 01/23/2008)
Rating
Hello! Good Site! Thanks you! wmsoloxrdxhw
 
Comment #12  (Posted by Andrei on 01/28/2008)
Rating
I can use following parameters:

[TARGETDIR]
[TARGETVDIR]
[TARGETPORT]

But I need to pass Product Name. It this possible? If so, which parameter I should use?
Thank you.

 
Comment #13  (Posted by willfread on 01/29/2008)
Rating
great Article ...The way he/she present the Topic
 
Comment #14  (Posted by an unknown user on 01/30/2008)
Rating
Just what I was looking for! Step-by-step, very complete and very easy to follow. Great article!
 
Comment #15  (Posted by Tomek on 02/07/2008)
Rating
great article

really great
 
Comment #16  (Posted by Tom on 02/08/2008)
Rating
This is the most helpful thing I've found on custom actions. Thanks.
 
Comment #17  (Posted by an unknown user on 02/10/2008)
Rating
It gives through knowledge of installer class and it's uses
 
Comment #18  (Posted by Blumen on 02/17/2008)
Rating
Great article! Very useful indeed!!
 
Comment #19  (Posted by Mustafa on 02/22/2008)
Rating
Thanks for the great post.. That covers many points and details of installation and uninstallation, thanks again..
 
Comment #20  (Posted by Greg Askew on 03/02/2008)
Rating
Thank you for writing this article, it is very helpful!
 
Comment #21  (Posted by an unknown user on 03/15/2008)
Rating
Excellent and many thanks. This article really helped. A section on how to add shortcuts into the start/programs menu along with the application's icon (non default) would be a great addition.
 
Comment #22  (Posted by an unknown user on 03/17/2008)
Rating
I was able to create a custom install package with limited experience.
 
Comment #23  (Posted by an unknown user on 04/18/2008)
Rating
bcas it has the more detailed and helpful info than the other articles on the net have..
 
Comment #24  (Posted by ducnm on 04/25/2008)
Rating
Great article, but I have a problem. When I unistall program, i want it not delete some file in directory. How do you do?

 
Comment #25  (Posted by Mayank Kukadia on 04/29/2008)
Rating
Greate article. Greate Efort. Thanks a lot.
 
Comment #26  (Posted by Geof on 05/06/2008)
Rating


hi,
first, sorry for my english…
I have made an Installer Class, it works, but my trouble is when the user want to stop the installation, it doesn’t stop… I have a message, but the installation goes on.
I have made method override for “RollBack” , but the programm doesn’t get in on clicking Cancel_Button.
How can I made for stopping or calling the rollback method, when the Cancel_Button is clicking?
thanks

 
Comment #27  (Posted by Arnaldo on 05/07/2008)
Rating
Hi Geof,

Why don't you join www.vbcity.com and post your question there, it will be easier to assist you this way, it will not be practical to engage into a technical discussion inside these comments, once your issue is resolve we can post a link to the VbCity's thread.

Regards,
Arnaldo
 
Comment #28  (Posted by an unknown user on 05/07/2008)
Rating
Fantastic effort thank you for that. That helped me a lot.
 
Sponsored Links