public virtual void Install(string serviceName) { Logger.Info("Installing service '{0}'", serviceName); var installer = new ServiceProcessInstaller { Account = ServiceAccount.LocalSystem }; var serviceInstaller = new ServiceInstaller(); String[] cmdline = { @"/assemblypath=" + Process.GetCurrentProcess().MainModule.FileName }; var context = new InstallContext("service_install.log", cmdline); serviceInstaller.Context = context; serviceInstaller.DisplayName = serviceName; serviceInstaller.ServiceName = serviceName; serviceInstaller.Description = "NzbDrone Application Server"; serviceInstaller.StartType = ServiceStartMode.Automatic; serviceInstaller.Parent = installer; serviceInstaller.Install(new ListDictionary()); Logger.Info("Service Has installed successfully."); }
/// <summary> /// Install an executable as a service. /// </summary> /// <param name="assemblyPath">The path to the executable.</param> /// <param name="serviceName">The name of the service.</param> /// <param name="displayName">THe display name of the service.</param> /// <param name="description">The description of the service.</param> /// <param name="startType">The startup type.</param> /// <param name="userName">The username to run as.</param> /// <param name="password">The password of the user.</param> /// <param name="dependancies"></param> public static void InstallService(string assemblyPath, string serviceName, string displayName, string description, ServiceStartMode startType, string userName = "", string password = "", IEnumerable<string> dependancies = null) { using (var procesServiceInstaller = new ServiceProcessInstaller()) { if (string.IsNullOrEmpty(userName)) { procesServiceInstaller.Account = ServiceAccount.LocalSystem; } else { procesServiceInstaller.Account = ServiceAccount.User; procesServiceInstaller.Username = userName; procesServiceInstaller.Password = password; } using (var installer = new ServiceInstaller()) { var cmdline = new[] { string.Format("/assemblypath={0}", assemblyPath) }; var context = new InstallContext(string.Empty, cmdline); installer.Context = context; installer.DisplayName = displayName; installer.Description = description; installer.ServiceName = serviceName; installer.StartType = startType; installer.Parent = procesServiceInstaller; if (dependancies != null) { installer.ServicesDependedOn = dependancies.ToArray(); } IDictionary state = new Hashtable(); try { installer.Install(state); installer.Commit(state); } catch (Exception ex) { installer.Rollback(state); throw new Exception("Failed to install the service.", ex); } } } }
public static void InstallService() { string serviceExecuteblePath = viewModel.InstallFolderPath + $@"\{Settings.ApplicationName}\Service\Service.exe"; if (!File.Exists(serviceExecuteblePath)) { // Add handler return; } try { ServiceProcessInstaller ProcesServiceInstaller = new ServiceProcessInstaller(); ProcesServiceInstaller.Account = ServiceAccount.LocalSystem; System.ServiceProcess.ServiceInstaller ServiceInstallerObj = new System.ServiceProcess.ServiceInstaller(); InstallContext Context = new InstallContext(); String path = $"/assemblypath={serviceExecuteblePath}"; String[] cmdline = { path }; Context = new InstallContext("", cmdline); ServiceInstallerObj.Context = Context; ServiceInstallerObj.DisplayName = "Application Service"; ServiceInstallerObj.Description = "Service for Application"; ServiceInstallerObj.ServiceName = "ApplicationService"; ServiceInstallerObj.StartType = ServiceStartMode.Automatic; ServiceInstallerObj.Parent = ProcesServiceInstaller; System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary(); ServiceInstallerObj.Install(state); } catch (Exception e) { OnInstallError?.Invoke("Error installing service." + e.Message); } }
void Install(String ServiceName, String DisplayName, String Description, System.ServiceProcess.ServiceAccount Account, System.ServiceProcess.ServiceStartMode StartMode) { System.ServiceProcess.ServiceProcessInstaller ProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller(); ProcessInstaller.Account = Account; System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller(); System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext(); string processPath = Process.GetCurrentProcess().MainModule.FileName; if (processPath != null && processPath.Length > 0) { System.IO.FileInfo fi = new System.IO.FileInfo(processPath); String path = String.Format("/assemblypath={0}", fi.FullName); String[] cmdline = { path }; Context = new System.Configuration.Install.InstallContext("", cmdline); } SINST.Context = Context; SINST.DisplayName = String.Format("{0}", DisplayName); SINST.Description = String.Format("{0}", Description); SINST.ServiceName = String.Format("{0}", ServiceName); SINST.StartType = StartMode; SINST.Parent = ProcessInstaller; // SINST.ServicesDependedOn = new String[] { "Spooler", "Netlogon", "Netman" }; SINST.ServicesDependedOn = null; System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary(); SINST.Install(state); using (RegistryKey oKey = Registry.LocalMachine.OpenSubKey(String.Format(@"SYSTEM\CurrentControlSet\Services\{0}", ServiceName), true)) { try { // Object sValue = oKey.GetValue("ImagePath"); Object sValue = oKey.GetValue("ImagePath"); string str = string.Format("{0} service", sValue.ToString()); oKey.SetValue("ImagePath", str); } catch (Exception Ex) { // System.Windows.Forms.MessageBox.Show(Ex.Message); System.Console.WriteLine("Failed to install {0}", Ex.Message); } } }
public void Install(String ServiceName, String DisplayName, String Description, System.ServiceProcess.ServiceAccount Account, System.ServiceProcess.ServiceStartMode StartMode) { System.ServiceProcess.ServiceProcessInstaller ProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller(); ProcessInstaller.Account = Account; System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller(); System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext(); string processPath = Process.GetCurrentProcess().MainModule.FileName; if (processPath != null && processPath.Length > 0) { System.IO.FileInfo fi = new System.IO.FileInfo(processPath); String path = String.Format("/assemblypath={0}", fi.FullName); String[] cmdline = { path }; Context = new System.Configuration.Install.InstallContext("", cmdline); } SINST.Context = Context; SINST.DisplayName = DisplayName; SINST.Description = Description; SINST.ServiceName = ServiceName; SINST.StartType = StartMode; SINST.Parent = ProcessInstaller; System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary(); SINST.Install(state); using (RegistryKey oKey = Registry.LocalMachine.OpenSubKey(String.Format(@"SYSTEM\CurrentControlSet\Services\{0}", SINST.ServiceName), true)) { try { Object sValue = oKey.GetValue("ImagePath"); oKey.SetValue("ImagePath", sValue); } catch (Exception Ex) { } } }
public void Install() { if (ServiceExists()) { logger.Warn("The service is already installed!"); } else { var installer = new ServiceProcessInstaller { Account = ServiceAccount.LocalSystem }; var serviceInstaller = new ServiceInstaller(); var exePath = Path.Combine(configService.ApplicationFolder(), SERVICEEXE); if (!File.Exists(exePath) && Debugger.IsAttached) { exePath = Path.Combine(configService.ApplicationFolder(), "..\\..\\..\\Jackett.Service\\bin\\Debug", SERVICEEXE); } string[] cmdline = { @"/assemblypath=" + exePath}; var context = new InstallContext("jackettservice_install.log", cmdline); serviceInstaller.Context = context; serviceInstaller.DisplayName = NAME; serviceInstaller.ServiceName = NAME; serviceInstaller.Description = DESCRIPTION; serviceInstaller.StartType = ServiceStartMode.Automatic; serviceInstaller.Parent = installer; serviceInstaller.Install(new ListDictionary()); } }
static void Install(bool install, InstallerOptions options) { var spi = new ServiceProcessInstaller(); var si = new ServiceInstaller(); spi.Account = ServiceAccount.NetworkService; if (options != null && options.IsUser) { spi.Account = ServiceAccount.User; if (options.UserName != null) { spi.Username = options.UserName; } if (options.Password != null) { spi.Password = options.Password; } } si.StartType = ServiceStartMode.Automatic; si.ServiceName = "CloudBackup"; si.DisplayName = "Cloud Backup Service"; si.Description = "Schedules, run and manage cloud backup"; si.Parent = spi; string path = Assembly.GetEntryAssembly().Location; Console.WriteLine("Location : " + path); var ic = new InstallContext(); ic.Parameters.Add("assemblypath", path); si.Context = ic; spi.Context = ic; IDictionary rb = install ? new Hashtable() : null; try { Console.WriteLine("Starting Default Installation"); if (install) { si.Install(rb); } else { si.Uninstall(rb); } } catch (Exception ex) { log.Fatal(ex); if (rb != null) { Console.WriteLine("Rollback Default Installation"); IDictionary rbc = rb; rb = null; si.Rollback(rbc); } } finally { if (rb != null) { Console.WriteLine("Commit Default Installation"); si.Commit(rb); } } }
static void SafeMain(string[] args) { AddERExcludedApplication(Process.GetCurrentProcess().MainModule.ModuleName); Console.WriteLine("TraceSpy Service - " + (Environment.Is64BitProcess ? "64" : "32") + "-bit - Build Number " + Assembly.GetExecutingAssembly().GetInformationalVersion()); Console.WriteLine("Copyright (C) SoftFluent S.A.S 2012-" + DateTime.Now.Year + ". All rights reserved."); var token = Extensions.GetTokenElevationType(); if (token != TokenElevationType.Full) { Console.WriteLine(""); Console.WriteLine("Warning: token elevation type (UAC level) is " + token + ". You may experience access denied errors from now on. You may fix these errors if you restart with Administrator rights or without UAC."); Console.WriteLine(""); } OptionHelp = CommandLineUtilities.GetArgument(args, "?", false); if (!OptionHelp) { OptionHelp = CommandLineUtilities.GetArgument(args, "h", false); if (!OptionHelp) { OptionHelp = CommandLineUtilities.GetArgument(args, "help", false); } } OptionService = CommandLineUtilities.GetArgument(args, "s", false); if (!OptionService) { if (OptionHelp) { Console.WriteLine("Format is " + Assembly.GetExecutingAssembly().GetName().Name + ".exe [options]"); Console.WriteLine("[options] can be a combination of the following:"); Console.WriteLine(" /? Displays this help"); Console.WriteLine(" /i Installs the <name> service"); Console.WriteLine(" /k Kills this process on any exception"); Console.WriteLine(" /u Uninstalls the <name> service"); Console.WriteLine(" /t Displays traces on the console"); Console.WriteLine(" /l:<name> Locale used"); Console.WriteLine(" default is " + CultureInfo.CurrentCulture.LCID); Console.WriteLine(" /name:<name> (Un)Installation uses <name> for the service name"); Console.WriteLine(" default is \"" + DefaultName + "\""); Console.WriteLine(" /displayName:<dname> (Un)Installation uses <dname> for the display name"); Console.WriteLine(" default is \"" + DefaultDisplayName + "\""); Console.WriteLine(" /description:<desc.> Installation ses <desc.> for the service description"); Console.WriteLine(" default is \"" + DefaultDisplayName + "\""); Console.WriteLine(" /startType:<type> Installation uses <type> for the service start mode"); Console.WriteLine(" default is \"" + ServiceStartMode.Manual + "\""); Console.WriteLine(" Values are " + ServiceStartMode.Automatic + ", " + ServiceStartMode.Disabled + " or " + ServiceStartMode.Manual); Console.WriteLine(" /user:<name> Name of the account under which the service should run"); Console.WriteLine(" default is Local System"); Console.WriteLine(" /password:<text> Password to the account name"); Console.WriteLine(" /config:<path> Path to the configuration file"); Console.WriteLine(" /dependson:<list> A comma separated list of service to depend on"); Console.WriteLine(""); Console.WriteLine("Examples:"); Console.WriteLine(Assembly.GetExecutingAssembly().GetName().Name + " /i /name:MyService /displayName:\"My Service\" /startType:Automatic"); Console.WriteLine(Assembly.GetExecutingAssembly().GetName().Name + " /u /name:MyOtherService"); return; } } OptionTrace = CommandLineUtilities.GetArgument(args, "t", false); OptionKillOnException = CommandLineUtilities.GetArgument(args, "k", false); OptionInstall = CommandLineUtilities.GetArgument(args, "i", false); OptionStartType = (ServiceStartMode)CommandLineUtilities.GetArgument(args, "starttype", ServiceStartMode.Manual); OptionLcid = CommandLineUtilities.GetArgument<string>(args, "l", null); OptionUninstall = CommandLineUtilities.GetArgument(args, "u", false); OptionAccount = (ServiceAccount)CommandLineUtilities.GetArgument(args, "user", ServiceAccount.User); OptionPassword = CommandLineUtilities.GetArgument<string>(args, "password", null); OptionUser = CommandLineUtilities.GetArgument<string>(args, "user", null); string dependsOn = CommandLineUtilities.GetArgument<string>(args, "dependson", null); if (!string.IsNullOrEmpty(dependsOn)) { OptionDependsOn = dependsOn.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); } else { OptionDependsOn = null; } OptionConfigPath = CommandLineUtilities.GetArgument<string>(args, "config", null); if (!string.IsNullOrEmpty(OptionConfigPath) && !Path.IsPathRooted(OptionConfigPath)) { OptionConfigPath = Path.GetFullPath(OptionConfigPath); } _configuration = ServiceSection.Get(OptionConfigPath); OptionDisplayName = CommandLineUtilities.GetArgument(args, "displayname", DefaultDisplayName); OptionDescription = CommandLineUtilities.GetArgument(args, "description", DefaultDescription); if (OptionInstall) { ServiceInstaller si = new ServiceInstaller(); ServiceProcessInstaller spi = new ServiceProcessInstaller(); si.ServicesDependedOn = OptionDependsOn; Console.WriteLine("OptionAccount=" + OptionAccount); Console.WriteLine("OptionUser="******"Password cannot be empty if Account is set to User."); return; } spi.Username = OptionUser; spi.Password = OptionPassword; } } else { spi.Account = OptionAccount; } si.Parent = spi; si.DisplayName = OptionDisplayName; si.Description = OptionDescription; si.ServiceName = OptionName; si.StartType = OptionStartType; si.Context = new InstallContext(Assembly.GetExecutingAssembly().GetName().Name + ".install.log", null); string asmpath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, AppDomain.CurrentDomain.FriendlyName); // TODO: add instance specific parameters here (ports, etc...) string binaryPath = "\"" + asmpath + "\"" // exe path + " /s" // we run as a service + " /name:" + OptionName; // our name if (!string.IsNullOrEmpty(OptionConfigPath)) { binaryPath += " /c:\"" + OptionConfigPath + "\""; } si.Context.Parameters["assemblypath"] = binaryPath; IDictionary stateSaver = new Hashtable(); si.Install(stateSaver); // see remarks in the function FixServicePath(si.ServiceName, binaryPath); return; } if (OptionUninstall) { ServiceInstaller si = new ServiceInstaller(); ServiceProcessInstaller spi = new ServiceProcessInstaller(); si.Parent = spi; si.ServiceName = OptionName; si.Context = new InstallContext(Assembly.GetExecutingAssembly().GetName().Name + ".uninstall.log", null); si.Uninstall(null); return; } if (!OptionService) { if (OptionTrace) { Trace.Listeners.Add(new ConsoleListener()); } if (!string.IsNullOrEmpty(OptionLcid)) { Extensions.SetCurrentThreadCulture(OptionLcid); } Console.WriteLine("Console Mode"); Console.WriteLine("Service Host name: " + OptionName); WindowsIdentity identity = WindowsIdentity.GetCurrent(); Console.WriteLine("Service Host identity: " + (identity != null ? identity.Name : "null")); Console.WriteLine("Service Host bitness: " + (IntPtr.Size == 4 ? "32-bit" : "64-bit")); Console.WriteLine("Service Host display name: '" + OptionDisplayName + "'"); Console.WriteLine("Service Host event log source: " + _service.EventLog.Source); Console.WriteLine("Service Host trace enabled: " + OptionTrace); Console.WriteLine("Service Host administrator mode: " + IsAdministrator()); string configPath = OptionConfigPath; if (configPath == null) { configPath = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; } Console.WriteLine("Service Host config file path: " + configPath); Console.WriteLine("Service Host current locale: " + Thread.CurrentThread.CurrentCulture.LCID + " (" + Thread.CurrentThread.CurrentCulture.Name + ")"); Console.Title = OptionDisplayName; ConsoleControl cc = new ConsoleControl(); cc.Event += OnConsoleControlEvent; _service.InternalStart(args); if (!_stopping) { _service.InternalStop(); } else { int maxWaitTime = Configuration.ConsoleCloseMaxWaitTime; if (maxWaitTime <= 0) { maxWaitTime = Timeout.Infinite; } _closed.WaitOne(maxWaitTime, Configuration.WaitExitContext); } return; } ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { _service }; Run(ServicesToRun); }
/// <summary> /// 应用程序的主入口点。 /// </summary> static void Main(string[] args) { if (System.Environment.UserInteractive) { string parameter = string.Concat(args); System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller(); ServiceController SCONTROL = new ServiceController(); SCONTROL.ServiceName = "appController"; switch (parameter) { // http://stackoverflow.com/questions/255056/install-a-net-windows-service-without-installutil-exe case "--install": //ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location }); ServiceProcessInstaller processInstaller = new ServiceProcessInstaller(); processInstaller.Account = ServiceAccount.LocalSystem; System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext(); string processPath = Process.GetCurrentProcess().MainModule.FileName; if (processPath != null && processPath.Length > 0) { System.IO.FileInfo fi = new System.IO.FileInfo(processPath); String path = String.Format("/assemblypath={0}", fi.FullName); String[] cmdline = { path }; Context = new System.Configuration.Install.InstallContext("", cmdline); } SINST.Context = Context; //SINST.DisplayName = String.Format("{0} - {1}", "appController", InstanceID); //SINST.Description = String.Format("{0} - {1}", "appController", InstanceID); //SINST.ServiceName = String.Format("{0}_{1}", "appController", InstanceID); SINST.ServiceName = "appController"; SINST.StartType = ServiceStartMode.Automatic; SINST.Parent = processInstaller; SINST.ServicesDependedOn = null; System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary(); SINST.Install(state); //// http://www.dotnet247.com/247reference/msgs/43/219565.aspx //using (RegistryKey oKey = Registry.LocalMachine.OpenSubKey(String.Format(@"SYSTEM\CurrentControlSet\Services\{0}_{1}", "", InstanceID), true)) //{ // try // { // Object sValue = oKey.GetValue("ImagePath"); // oKey.SetValue("ImagePath", sValue); // } // catch (Exception Ex) // { // MessageBox.Show(Ex.Message); // } //} break; case "--uninstall": //ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); //http://www.theblacksparrow.com/ SINST.Context = new System.Configuration.Install.InstallContext( Environment.GetEnvironmentVariable("temp") + "\\install.log", null); //SINST.ServiceName = String.Format("{0}_{1}", ServiceName, InstanceID); SINST.ServiceName = "appController"; SINST.Uninstall(null); break; case "--start": if (SCONTROL.Status == ServiceControllerStatus.Stopped) { SCONTROL.Start(); } break; case "--stop": if (SCONTROL.Status == ServiceControllerStatus.Running) { SCONTROL.Stop(); } break; } } else { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new MyService() }; ServiceBase.Run(ServicesToRun); } }