/*
* 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);
}
}
}
}