![]() |
Development Lifecycle »
Installation »
General
Beginner
License: The Code Project Open License (CPOL)
Install Windows Service using Custom ActionBy lata07mahiThis article explains how to a custom action EXE to install a service using WinNT utilities, instsrv.exe and srvany.exe |
C# (C# 2.0), Windows (WinXP)
|
||||||||
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
Services can be installed using MSI (Microsoft Installer) by adding custom actions. This tutorial gives step-by-step details how custom action can be added which would install user service silently. It then modifies the registry entries for the service installed and logon user account based on user input.
Windows
NT resource kit provides two utilities, srvany.exe
and instsrv.exe
which can be
used to allow any windows application to run as Windows Service,
install and remove
any
windows service.
Using following steps create a custom action executable:
using System.Text; using System.Configuration.Install; using System.Windows.Forms; using System.IO; using System.Reflection; using System.ServiceProcess; using System.Resources; using System.Threading; using System.Management; using System.DirectoryServices; using System.Collections; using Microsoft.Win32; using System.Runtime.InteropServices; namespace ServiceInstaller { [RunInstaller(true)] public partial class ServiceInstall : System.Configuration.Install.Installer { public override void Install(IDictionary savedState) { base.Install(savedState); //Add custom code here } public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); //Add custom code here } public override void Rollback(IDictionary savedState) { base.Rollback(savedState); //Add custom code here } public override void Commit(IDictionary savedState) { base.Commit(savedState); //Add custom code here } static void Main() { } } }
Add
a Setup and deployment project named SetupService
in
the same solution.

This method explains how service is installed using Windows NT utilities instsrv.exe and srvany.exe.
private bool LaunchService(string serviceEXE) { bool blnServiceInstalled = true; //Stop Service if running System.ServiceProcess.ServiceController[] services; services = System.ServiceProcess.ServiceController.GetServices(); if (services != null) { for(int intServiceCount=0; intServiceCount<services.Length;intServiceCount++) { if(services[intServiceCount].ServiceName == serviceEXE) { if(services[intServiceCount].Status == ServiceControllerStatus.Running) { using(StreamWriter sw = File.CreateText(strPath + batchFileName)) { sw.WriteLine("net stop {0}", serviceEXE); } ExecuteBatchFile(); File.Delete(strPath + batchFileName); } break; } } } //Register as Windows Service using instsrv.exe and srvany.exe using (StreamWriter sw = File.CreateText(strPath + batchFileName)) { sw.WriteLine("cd {0}", strPath); sw.WriteLine("instsrv " + serviceEXE + " " + strPath + "\\" + "srvany.exe"); sw.Flush(); sw.Close(); } ExecuteBatchFile(); File.Delete(strPath + batchFileName); //Modify Registry entries for service added RegistryKey SystemServicesKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Services"); if (SystemServicesKey != null) { //Open service key with write access RegistryKey userServiceKey = SystemServicesKey.OpenSubKey(serviceEXE, true); if (userServiceKey != null) { userServiceKey.SetValue("Description", "Test Service Application"); if (userName != "") { userServiceKey.SetValue("ObjectName", ".\\" + userName); } else { userServiceKey.SetValue("ObjectName", ServiceAccount.LocalSystem); } //Set path where service is copied on the system userServiceKey.SetValue("ImagePath", strPath + "\\" +serviceEXE+serviceExtn); //Start automatically userServiceKey.SetValue("Start", 0x02); userServiceKey.Close(); SystemServicesKey.Close(); } else { SystemServicesKey.Close(); MessageBox.Show("Windows Service registration failed.Installation aborted!"); blnServiceInstalled = false; } } return blnServiceInstalled; }
Hope
this code give an insight into writing custom actions and installing Windows
service using Windows NT utilities. This is one of the possible methods for
installing services. Since custom action is compiled as an executable, more
customized code can be added in it.
| You must Sign In to use this message board. | |||||
|
|||||
|
|||||
|
|||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 15 May 2008 Editor: |
Copyright 2008 by lata07mahi Everything else Copyright © CodeProject, 1999-2009 Web13 | Advertise on the Code Project |