Удаление службы - C#
Формулировка задачи:
Всем привет...Проблема вот в чем:
Я написал некую службу, и мне необходимо её удалить программно...
Делаю так:
Так вот...если я запускаю мой файл сервиса с параметром /uninstall, то служба удаляется...Всё как должно быть...Но мне нужно, чтоб сервис сам себя удалил, поэтому делаю так:
Соответственно вот код файла delete.exe
Так вот...если я сам запущу файл delete.exe, то служба удалится, но если этот файл был запущен из сервиса (как и должно быть), то служба не удаляется.
ti.Uninstall(null); выдаёт исключение:
Как решить даннуж пробему?
static void Main(string[] args) { if (args.Length > 0) { if (args[0] != null && args[0].ToLower() == "/uninstall") UnInstall(); } else { // Запуск службы // } } private static void UnInstall() { TransactedInstaller ti = new TransactedInstaller(); ProjectInstaller mi = new ProjectInstaller(); ti.Installers.Add(mi); String path = String.Format("/assemblypath={0}", Assembly.GetExecutingAssembly().Location); String[] cmdline = { path }; InstallContext ctx = new InstallContext("", cmdline); ti.Context = ctx; ti.Uninstall(null); }
static void Main(string[] args) { if (args.Length > 0) { if (args[0] != null && args[0].ToLower() == "/uninstall") UnInstall(); } else { // Запуск службы // if (delete)//Если нужно удалить { string filename = path + @"\MyService.exe"; //Путь до файла string delname = path + @"\delete.exe"; //Программа, которая запустит файл с параметром /uninstall Process proc = new Process(); proc.StartInfo.WorkingDirectory = path; proc.StartInfo.FileName = delname; proc.StartInfo.Arguments = filename; proc.Start(); } } }
static void Main(string[] args) { if (args.Length > 0) { string filename = args[0]; if(!new FileInfo(filename).Exist)return; Thread.Sleep(10000);//Ждём чтоб служба остановилась Process.Start(filename, "/uninstall"); } }
При удалении из системы возникло исключение. Это исключение будет проигнорировано, и удаление из системы будет продолжено. Однако после завершения удаления данное приложение может оказаться не полностью удаленным.
в System.Configuration.Install.Installer.Uninstall(IDictionary savedState)
в System.Configuration.Install.TransactedInstaller.Uninstall(IDictionary savedState)
в WiWUpdateService.Program.UnInstall()
Решение задачи: «Удаление службы»
textual
Листинг программы
private static void UnInstall(string serviceName, int timeoutMilliseconds, string path) { ServiceController service = new ServiceController(serviceName); try { TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); Process.Start(path, "/uninstall"); } catch { // ... } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д