static string InstallServiceDontStart(string serviceName, string nameInServices, string serviceFullPath) { if (ServiceInstaller.ServiceIsInstalled(serviceName) == false) { ServiceInstaller.InstallAndStart(serviceName, nameInServices, serviceFullPath, false); for (int i = 0; i < 50; i++) { if (ServiceInstaller.getStatus(serviceName) != "Running") { Thread.Sleep(200); } else { return("ok"); } } } return("failed"); }
private void button2_Click(object sender, EventArgs e) { ServiceController[] services = ServiceController.GetServices(); DataTable dt = CreateTable(); foreach (var item in services) { if (item.ServiceName.IndexOf("Off") >= 0 || item.ServiceName.IndexOf("Common") >= 0 || item.ServiceName.IndexOf("Balan") >= 0) { DataRow dr = dt.NewRow(); dr["ServiceName"] = item.ServiceName; dr["Status"] = item.Status.ToString(); dt.Rows.Add(dr); } } ServiceInstaller sm = new ServiceInstaller(); this.dataGridView1.DataSource = dt; }
static string StopServiceAndUnInstall(string serviceName) { if (ServiceInstaller.ServiceIsInstalled(serviceName) == true) { try { ServiceInstaller.StopService(serviceName); int count = 15; while (ServiceInstaller.getStatus(serviceName) != "Stopped") { Thread.Sleep(700); count--; if (count == 0) { return("Failed to stop service"); } } } catch (Exception err) { return(err.Message); } try { ServiceInstaller.Uninstall(serviceName); return("ok"); } catch (Exception err) { return(err.Message); } } else { return("ok"); } }
static void Main(string[] args) { if (args != null && args.Length > 0) { try { _operationId = Convert.ToInt32(args[0]); } catch { _operationId = 0; } if (args.Length == 2) { try { _action = Convert.ToString(args[1]); } catch { _action = ""; } } } // TODO: Add code to start application here // Testing -------------- //string svcPath; //string svcName; //string svcDispName; //path to the service that you want to install //const string SERVICE_PATH = @"D:\GitProjects\MagicUpdater\MagicUpdater\bin\Release\MagicUpdater.exe"; const string SERVICE_PATH = @"C:\SystemUtils\MagicUpdater\MagicUpdater.exe"; const string SERVICE_DISPLAY_NAME = "MagicUpdater"; const string SERVICE_NAME = "MagicUpdater"; const string MAGIC_UPDATER_PATH = @"C:\SystemUtils\MagicUpdater"; const string MAGIC_UPDATER_NEW_VER_PATH = @"C:\SystemUtils\MagicUpdaterNewVer"; const string SETTINGS_FILE_NAME = "settings.json"; ServiceInstaller serviceInstaller = new ServiceInstaller(); ServiceController service = new ServiceController(SERVICE_NAME); try { if (string.IsNullOrEmpty(_action)) { TimeSpan timeout = TimeSpan.FromMilliseconds(30000); Console.WriteLine("Тормозим старую службу..."); //Тормозим старую службу try { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); AddMessage($"Старая служба {SERVICE_NAME} - остановлена"); NLogger.LogDebugToHdd($"Старая служба {SERVICE_NAME} - остановлена"); Console.WriteLine("Старая служба остановлена"); } catch (Exception ex) { AddMessage(ex.Message); NLogger.LogDebugToHdd(ex.Message); Console.WriteLine(ex.Message); } Console.WriteLine("Удаляем старую службу..."); //Удаляем старую службу try { serviceInstaller.UnInstallService(SERVICE_NAME); Thread.Sleep(3000); NLogger.LogDebugToHdd($"Старая служба {SERVICE_NAME} - удалена"); AddMessage($"Старая служба {SERVICE_NAME} - удалена"); Console.WriteLine($"Старая служба {SERVICE_NAME} - удалена"); } catch (Exception ex) { AddMessage(ex.Message); NLogger.LogDebugToHdd(ex.Message); Console.WriteLine(ex.Message); } Console.WriteLine("Убиваем все процессы MagicUpdater..."); //Убиваем все процессы MagicUpdater Process[] procs = Process.GetProcessesByName(SERVICE_NAME); foreach (var proc in procs) { proc.Kill(); } Thread.Sleep(3000); NLogger.LogDebugToHdd($"Все процессы {SERVICE_NAME} - убиты"); AddMessage($"Все процессы {SERVICE_NAME} - убиты"); Console.WriteLine("Все процессы MagicUpdater завершены"); Console.WriteLine("Чистим реестр (автозагрузка MU как приложения в корне run)..."); //Чистим реестр (автозагрузка MU как приложения в корне run) #region Чистим реестр string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run"; using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true)) { if (key == null) { Console.WriteLine($"CurrentUser: Отсутствует путь в реестре {keyName}"); NLogger.LogErrorToHdd($"CurrentUser: Отсутствует путь в реестре {keyName}"); AddMessage($"CurrentUser: Отсутствует путь в реестре {keyName}"); } else { try { key.DeleteValue(SERVICE_NAME); Console.WriteLine($"CurrentUser: Значение реестра - {SERVICE_NAME} удалено"); NLogger.LogDebugToHdd($"CurrentUser: Значение реестра - {SERVICE_NAME} удалено"); AddMessage($"CurrentUser: Значение реестра - {SERVICE_NAME} удалено"); } catch (Exception ex) { NLogger.LogDebugToHdd($"CurrentUser: {ex.Message}"); Console.WriteLine($"CurrentUser: {ex.Message}"); AddMessage($"CurrentUser: {ex.Message}"); } } } using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName, true)) { if (key == null) { NLogger.LogErrorToHdd($"LocalMachine: Отсутствует путь в реестре {keyName}"); AddMessage($"LocalMachine: Отсутствует путь в реестре {keyName}"); } else { try { key.DeleteValue(SERVICE_NAME); Console.WriteLine($"LocalMachine: Значение реестра - {SERVICE_NAME} удалено"); NLogger.LogDebugToHdd($"LocalMachine: Значение реестра - {SERVICE_NAME} удалено"); AddMessage($"LocalMachine: Значение реестра - {SERVICE_NAME} удалено"); } catch (Exception ex) { Console.WriteLine($"LocalMachine: {ex.Message}"); NLogger.LogDebugToHdd($"LocalMachine: {ex.Message}"); AddMessage($"LocalMachine: {ex.Message}"); } } } #endregion Чистим реестр Console.WriteLine("Удаляем все из папок MagicUpdater и MagicUpdaterNewVer..."); //Удаляем все из папок MagicUpdater и MagicUpdaterNewVer #region Удаляем все из папок MagicUpdater и MagicUpdaterNewVer try { DirectoryInfo di = new DirectoryInfo(MAGIC_UPDATER_PATH); foreach (FileInfo file in di.GetFiles()) { if (file.Name.ToUpper() != SETTINGS_FILE_NAME.ToUpper()) { file.Delete(); } } foreach (DirectoryInfo dir in di.GetDirectories()) { dir.Delete(true); } Console.WriteLine($"Путь {MAGIC_UPDATER_PATH} - очищен"); NLogger.LogDebugToHdd($"Путь {MAGIC_UPDATER_PATH} - очищен"); AddMessage($"Путь {MAGIC_UPDATER_PATH} - очищен"); } catch (Exception ex) { Console.WriteLine(ex.Message); NLogger.LogErrorToHdd(ex.ToString()); AddMessage(ex.Message); } try { DirectoryInfo di = new DirectoryInfo(MAGIC_UPDATER_NEW_VER_PATH); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } foreach (DirectoryInfo dir in di.GetDirectories()) { dir.Delete(true); } Console.WriteLine($"Путь {MAGIC_UPDATER_NEW_VER_PATH} - очищен"); NLogger.LogDebugToHdd($"Путь {MAGIC_UPDATER_NEW_VER_PATH} - очищен"); AddMessage($"Путь {MAGIC_UPDATER_NEW_VER_PATH} - очищен"); } catch (Exception ex) { Console.WriteLine(ex.Message); NLogger.LogErrorToHdd(ex.ToString()); AddMessage(ex.Message); } #endregion Удаляем все из папок MagicUpdater и MagicUpdaterNewVer Thread.Sleep(1000); Console.WriteLine("Скачиваем новую версию..."); //Копируем новый MagicUpdater целиком! #region Копируем новый MagicUpdater целиком! using (Ftp ftp = new Ftp()) { ftp.Connect("mskftp.sela.ru"); // or ConnectSSL for SSL ftp.Login("cis_obmen", "cisobmen836"); try { Directory.CreateDirectory(MAGIC_UPDATER_PATH); ftp.DownloadFiles("MagicUpdaterTest", MAGIC_UPDATER_PATH, new RemoteSearchOptions("*", true)); } finally { if (ftp.Connected) { ftp.Close(); } } } Console.WriteLine($"Закачка нового {SERVICE_NAME} - завешена"); NLogger.LogDebugToHdd($"Закачка нового {SERVICE_NAME} - завешена"); AddMessage($"Закачка нового {SERVICE_NAME} - завешена"); #endregion Копируем новый MagicUpdater целиком! //Устанавливаем службу с режимом автозапуска //Запускаем службу Thread.Sleep(3000); Console.WriteLine("Создаем задачу MuInstallService в планировщике для установки службы..."); NLogger.LogDebugToHdd("Создаем задачу MuInstallService в планировщике для установки службы..."); try { CreateMuInstallServiceSchedule("MuInstallService"); Console.WriteLine("Задача MuInstallService создана"); NLogger.LogDebugToHdd("Задача MuInstallService создана"); } catch (Exception ex) { Console.WriteLine($"Задача MuInstallService: {ex.Message}"); NLogger.LogErrorToHdd($"Задача MuInstallService: {ex.ToString()}"); } //string path = System.Reflection.Assembly.GetEntryAssembly().Location; //Process.Start(path, $"{_operationId.ToString()} restart"); } else if (_action == "restart") { serviceInstaller.InstallService(SERVICE_PATH, SERVICE_NAME, SERVICE_DISPLAY_NAME); Console.WriteLine($"Новая служба {SERVICE_NAME} - установлена и запущена"); NLogger.LogDebugToHdd($"Новая служба {SERVICE_NAME} - установлена и запущена"); AddMessage($"Новая служба {SERVICE_NAME} - установлена и запущена"); //serviceInstaller.UnInstallService(SERVICE_NAME); SendMessagesToOperation(true); DeleteSchedule("MuInstallService"); } else if (_action == "schedule") { CreateMuInstallServiceSchedule("MuInstallService"); } } catch (Exception ex) { Console.WriteLine(ex.Message); NLogger.LogErrorToHdd(ex.ToString()); AddMessage(ex.Message); SendMessagesToOperation(false); } //Console.Read(); }