public static void Install(Type exeType, IEnumerable<OpenService> services, string username, string password) { var spi = new ServiceProcessInstaller { Account = string.IsNullOrEmpty(username) ? ServiceAccount.LocalSystem : ServiceAccount.User, Username = username, Password = password, Context = new InstallContext("install.txt", new string[0]) }; spi.Context.Parameters["assemblypath"] = exeType.Assembly.Location; foreach (OpenService service in services) service.AddInstaller(spi); spi.Install(new Hashtable()); }
/// <summary> /// Installiert einen Dienst. /// </summary> /// <param name="configuration">Die Konfiguration des Dienstes.</param> /// <param name="fileName">Der volle Pfad zur Konfigurationsdatei.</param> /// <param name="install">Gesetzt, wenn eine Installation ausgeführt werden soll.</param> private static void Install( RecordingServiceConfiguration configuration, string fileName, bool install ) { // Create the service installer var service = new ServiceInstaller { Description = "Generic Recorder / Tuner Service based on JMS Argus TV SDK", DisplayName = configuration.Name + " (Argus TV Recorder)", ServiceName = CreateServiceName( configuration ), StartType = ServiceStartMode.Manual, Context = new InstallContext(), }; // Create the process installer var process = new ServiceProcessInstaller { Account = ServiceAccount.LocalService, Context = service.Context, }; // Link together process.Installers.Add( service ); // Create service path var exePath = "\"" + new Uri( Assembly.GetExecutingAssembly().CodeBase ).LocalPath.Replace( "\"", "\"" ) + "\""; var configPath = "\"" + fileName + "\""; // Configure service path process.Context.Parameters["assemblypath"] = exePath + " " + configPath; // Create state var pathToState = fileName + ".install"; var serializer = new BinaryFormatter(); // Try it if (install) { // Create the state var state = new Hashtable(); // Do the installation process.Install( state ); // Save the state using (var stateFile = new FileStream( pathToState, FileMode.Create, FileAccess.Write, FileShare.None )) serializer.Serialize( stateFile, state ); } else { // Load the state using (var stateFile = new FileStream( pathToState, FileMode.Open, FileAccess.Read, FileShare.Read )) { // Reconstruct the state var state = (Hashtable) serializer.Deserialize( stateFile ); // Do the installation process.Uninstall( state ); } // Done File.Delete( pathToState ); } }
public void Install() { ServiceProcessInstaller spi = new ServiceProcessInstaller(); spi.Account = ServiceAccount.LocalSystem; spi.Username = null; spi.Password = null; spi.Context = new InstallContext("install.txt", new string[0]); spi.Context.Parameters["assemblypath"] = GetType().Assembly.Location; AddInstaller(spi); spi.Install(new Hashtable()); }