Per creare un servizio in grado di supportare l'installazione multipla e' sufficiente modificare il nome del servizio ad ogni installazione, quindi per semplicita' si puo' utilizzare un "Application Configuration File" in cui viene specificato il nome del servizio:
xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServiceName" value="Service Instance 1"/>
appSettings>
configuration>
Per fare in modo che il nome del servizio venga definito dal file di configurazione e' necessario scrivere qualche riga di codice all'interno della classe di installazione:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Configuration.Install;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
namespace MultipleInstanceService
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
serviceInstaller1.ServiceName = GetConfigurationValue("ServiceName");
}
private string GetConfigurationValue(string key)
{
Assembly service = Assembly.GetAssembly(typeof(ProjectInstaller));
Configuration config = ConfigurationManager.OpenExeConfiguration(service.Location);
if (config.AppSettings.Settings[key] != null)
{
return config.AppSettings.Settings[key].Value;
}
else
{
throw new IndexOutOfRangeException("Requested key no found:" + key);
}
}
}
}
A questo punto possiamo creare istanze multiple semplicenmente modificando il nome del servizio nel file di configurazione:
C:\Windows\system32>installutil.exe
"C:\Works\MultipleInstanceService\build\MultipleInstanceService.exe"
MultipleInstanceService.zip