/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections; using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; using Microsoft.Win32; namespace LuceneMonitorInstall { /// /// Summary description for ProjectInstaller. /// [RunInstallerAttribute(true)] public class ProjectInstaller : Installer { private ServiceProcessInstaller processInstaller; private ServiceInstaller serviceInstaller; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public ProjectInstaller() { // This call is required by the Designer. InitializeComponent(); // TODO: Add any initialization after the InitializeComponent call } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.processInstaller = new ServiceProcessInstaller(); this.serviceInstaller = new ServiceInstaller(); this.processInstaller.Account = ServiceAccount.LocalSystem; this.serviceInstaller.ServiceName = "LuceneMonitor"; this.serviceInstaller.StartType = ServiceStartMode.Manual; Installers.Add(this.processInstaller); Installers.Add(this.serviceInstaller); } #endregion public override void Install(IDictionary stateSaver) { RegistryKey system; RegistryKey currentControlSet; //HKEY_LOCAL_MACHINE\Services\CurrentControlSet RegistryKey services; //...\Services RegistryKey service; //...\ try { //Let the project installer do its job base.Install(stateSaver); system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System"); //Open the HKEY_LOCAL_MACHINE\SYSTEM key currentControlSet = system.OpenSubKey("CurrentControlSet"); //Open CurrentControlSet services = currentControlSet.OpenSubKey("Services"); //Go to the services key service = services.OpenSubKey(this.serviceInstaller.ServiceName, true); //Open the key for serviceInstaller service.SetValue("Description", "Lucene Monitor"); } catch(Exception e) { Console.WriteLine("An exception was thrown during service installation:\n" + e.ToString()); } } public override void Uninstall(IDictionary savedState) { RegistryKey system; RegistryKey currentControlSet; //HKEY_LOCAL_MACHINE\Services\CurrentControlSet RegistryKey services; //...\Services RegistryKey service; //...\ try { //Drill down to the service key and open it with write permission system = Registry.LocalMachine.OpenSubKey("System"); currentControlSet = system.OpenSubKey("CurrentControlSet"); services = currentControlSet.OpenSubKey("Services"); service = services.OpenSubKey(this.serviceInstaller.ServiceName, true); service.DeleteSubKeyTree("Description"); //Delete keys created during installation } catch(Exception e) { Console.WriteLine("Exception encountered while uninstalling service:\n" + e.ToString()); } finally { //Let the project installer do its job base.Uninstall(savedState); } } } }