Code: Installing a Managed Service with a Custom Name [Robert Villahermosa]


using System;
using System.ServiceProcess;
using System.Configuration.Install;
using System.ComponentModel;
using System.IO;

public class SimpleService : ServiceBase
{

public static void Main()
{
ServiceBase.Run(new SimpleService());
}

public SimpleService()
{
CanPauseAndContinue = true;
//Here we are setting a service name to show you don’t need a custom name if you don’t want one
//This gets overriden in this example later
ServiceName = “SimpleService”;
}

protected override void OnStart(string[] args)
{
//This is where your service would do something useful when it starts
}

protected override void OnStop()
{
//This is where your service would do something useful when it stops
}

}

[RunInstallerAttribute(true)]
public class ProjectInstaller : Installer
{
private ServiceInstaller serviceInstaller;
private ServiceProcessInstaller processInstaller;

public ProjectInstaller()
{
processInstaller = new ServiceProcessInstaller();
serviceInstaller = new ServiceInstaller();
// Service will run under system account
processInstaller.Account = ServiceAccount.LocalSystem;
// Service will have Start Type of Manual
serviceInstaller.StartType = ServiceStartMode.Manual;
// Service will have the following name (optional) this just shows
// you don’t need to have a custom name, you can omit this though
serviceInstaller.ServiceName = “SimpleService”;
// Here we are going to hook up some custom events prior to the install and uninstall
BeforeInstall += new InstallEventHandler(BeforeInstallEventHandler);
BeforeUninstall += new InstallEventHandler(BeforeUninstallEventHandler);
// serviceInstaller.ServiceName = servicename;
Installers.Add(serviceInstaller);
Installers.Add(processInstaller);
}

private void BeforeInstallEventHandler(object sender, InstallEventArgs e)
{
// Add steps to perform any actions before the install process.
Console.WriteLine(“BeforeInstallEventHandler Called”);
Console.WriteLine(“Please enter the name you would like this service installed as:”);
serviceInstaller.ServiceName = Console.ReadLine();
PersistServiceName(serviceInstaller.ServiceName);
Console.WriteLine(“Attempting to install service as: “ + serviceInstaller.ServiceName);
}

private void BeforeUninstallEventHandler(object sender, InstallEventArgs e)
{
Console.WriteLine(“BeforeUninstallEventHandler Called”);
serviceInstaller.ServiceName = RetrieveServiceName();
// Add steps to perform any actions before the Uninstall process.
Console.WriteLine(“Code for BeforeUninstallEventHandler”);
}

private void PersistServiceName(string serviceName)
{
//This method stores the service name, you can choose whatever method to persist this data as you like
TextWriter tw = new StreamWriter(“Service.config”, false);
tw.WriteLine(serviceName);
tw.Close();
}

private string RetrieveServiceName()
{
string serviceName;
//This method retrieves the service name, and should mirror the Perist method above
TextReader tr = new StreamReader(“Service.config”);
serviceName = tr.ReadLine();
tr.Close();
Console.WriteLine(“ServiceName “ + serviceName);
return serviceName;
}
}

Comments (0)