2012-08-30 3 views
11

Powiel możliwe:
How to install a windows service programmatically in C#?programowo usunąć usługę z wykorzystaniem C#

Czy istnieje sposób programowo usunąć usługę przy użyciu C#, bez konieczności wykonywania „InstallUtil.exe/u MyService. exe "?

+0

Jest to usługa napisany w języku C#? –

+0

Uwaga: Żadna z wymienionych poniżej metod nie będzie działać ze strony internetowej uruchomionej w IIS. IIS nie pozwoli na to ze względów bezpieczeństwa. – Kevin

Odpowiedz

18

Można użyć ServiceInstaller.Uninstall method w System.ServiceProcess.dll. Na przykład:

ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
InstallContext Context = new InstallContext("<<log file path>>", null); 
ServiceInstallerObj.Context = Context; 
ServiceInstallerObj.ServiceName = "MyService"; 
ServiceInstallerObj.Uninstall(null); 

Ta metoda podejmie próbę zatrzymania usługi przed odinstalowaniem.

+1

Nie rozumiem, metoda Odinstaluj pobiera savedState, a nie nazwę usługi. –

+0

Masz rację. Zaktualizowany w innym przykładzie, który znalazłem .. –

+0

InstallContext nie w System.ServicesProcess – ArthNRick

1
System.Configuration.Install.ManagedInstallerClass 
          .InstallHelper(new string[] { "/u", executablePath }); 
+0

Z jakiegokolwiek powodu twierdzi, że usługa nie jest zainstalowana, ale jest. Jest to usługa zewnętrzna napisana w .NET. Mam prawa administratora do mojego procesu. – modiX

0

Usługi są wymienione w rejestrze systemu Windows w katalogu HKLM \ SYSTEM \ CurrentControlSet \ services. Jeśli usuniesz klucz odpowiadający danemu imieniu usługi (nie nazwa wyświetlana, ta, pod którą została zarejestrowana), będziesz skutecznie "wyrejestrował" usługę. Możesz to zrobić programowo przy pomocy obiektu Microsoft.Win32.Registry. Będziesz potrzebował uprawnień CAS na komputerze wykonawczym, aby zmodyfikować wpisy rejestru.

+0

Nie jest to zalecane – Onkelborg

+3

+1 Może to nie być zalecane, ma tę zaletę, że faktycznie działa. :) Alternatywą jest 'CreateProcess sc.exe delete ServiceName'. – Andomar

1

Jeśli próbujesz odinstalować usługę, napisałeś sam z siebie i dodałeś instalator do projektu, możesz po prostu utworzyć instancję klasy instalatora i zadzwonić Odinstaluj. Na przykład, jeśli przeciągnięty instalatora na usługi projektanta i nazwany że komponent „ProjectInstaller”, można uzyskać dostęp do usługi, aby odinstalować się z następującego kodu:

var installer = new ProjectInstaller(); 
installer.Uninstall(null);