Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1357
  • Last Modified:

Multiple Installer for Windows Service written in .Net

Dear Experts,

I have a windows service that is written in vb.net/.net 4.0. This is how I use the windows service.

1. I install seven instances of the same service on multiple servers. Each service reads an application settings value called process id (one value from 1 through 7). When the service processes data, it reads data belonging to that specific process id.  That way I can run seven instances of the same service independently without any instance stepping any other instance.

2. The system administrators at my company want seven different installer (.msi) files, one for each windows service. So I have seven copies of the same windows service project. Each service has its own service installer and service process installer. Also, each windows service project has its own setup project. So I set the configuration value (process id) and service name for each windows service and execute a build for each service.

As you can see, this is not the most efficient way of implementing this. So I looked at this solution:
http://www.codeproject.com/Articles/21320/Multiple-Instance-NET-Windows-Service

While I was able to implement this fairly easily, I cannot use installUtil (system administrators do not want to use it). I still want to build multiple installer (.msi) files but not have to keep multiple copies of code. Also, the seven services are installed across three servers and so I cannot package all seven services in one .msi file.

Is there a way I could keep one copy of the service and generate seven (or more instances controlled by a script or configuration file) different .msi files, one for each instance of the service?

My ideal solution will be to have some kind of a script that will accept number of services as a parameter and then generate one .msi file for each instance of the service. I am leaning towards PowerShell but don't know how difficult it will be in PowerShell. Also, I'd like to keep just one copy of the windows service code.

Sorry my question's description is a bit long but I wanted to make sure I document all the facts.

Thanks for your help.
0
shekhar_shashi
Asked:
shekhar_shashi
2 Solutions
 
SriVaddadiCommented:
I don't think you would need multiple msi packages. You could prompt for the service name (which should be unique in order to install multiple service instances) through the installer and write it to the config file in your installer code.

You program always reads the service name from the configuration file as shown in the link you posted.
0
 
HaiFaiCommented:
Hi

How about if you make main entry and add installer to service it self ?
so that you could just share exe file and use it with parameters like
service.exe /install /4
so it will install 4 services
something like this what i use

 Try
            If args.Length > 0 Then
                Select Case args(0)
                    Case Is = "/u", "/uninstall", "-u"
                        System.Configuration.Install.ManagedInstallerClass.InstallHelper(New String() {"/u", Assembly.GetExecutingAssembly().Location})
                        MsgBox("Service uninstalled sucessfully!", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "Self Installing Service")
                    Case "/i", "/install", "-i"
                        System.Configuration.Install.ManagedInstallerClass.InstallHelper(New String() {Assembly.GetExecutingAssembly().Location})
                        MsgBox("Service installed sucessfully! Please start it from the Services control panel.", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "Self Installing Service")
                    Case "/h", "/options", "/o", "/help", "-h"
                        MsgBox("parameters " & vbCrLf & "service.exe /i or /install will install serverce" & vbCrLf & "service.exe /u or /uninstall will uninstall service")
                        ' My.Forms.ApplicationOptionsForm.ShowDialog()
                    Case Else
                        MsgBox("Just because I don't care doesn't mean I don't understand. :Homer Simpson")
                End Select
            Else
                Dim ServicesToRun() As System.ServiceProcess.ServiceBase
                ServicesToRun = New System.ServiceProcess.ServiceBase() {New email_exporter_service}
                System.ServiceProcess.ServiceBase.Run(ServicesToRun)
            End If
        Catch ex As Exception
            MsgBox("An error occured: " & vbCrLf & vbCrLf & ex.ToString, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "Self Installing Service")
        End Try

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Simplify Active Directory Administration

Administration of Active Directory does not have to be hard.  Too often what should be a simple task is made more difficult than it needs to be.The solution?  Hyena from SystemTools Software.  With ease-of-use as well as powerful importing and bulk updating capabilities.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now