2012-08-30 46 views
11

thể trùng lặp:
How to install a windows service programmatically in C#?Lập trình loại bỏ một dịch vụ sử dụng C#

Có cách nào để lập trình loại bỏ một dịch vụ sử dụng C# mà không cần phải thực hiện "InstallUtil.exe/u MyService. exe "?

+0

Đây có phải là một dịch vụ viết bằng C#? –

+0

Lưu ý: Không có phương pháp nào được liệt kê bên dưới sẽ hoạt động từ một trang web chạy trong IIS. IIS sẽ không cho phép nó do vấn đề bảo mật. – Kevin

Trả lời

18

Bạn có thể sử dụng ServiceInstaller.Uninstall method trong System.ServiceProcess.dll. Ví dụ:

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

Phương pháp này sẽ cố gắng ngừng dịch vụ trước khi gỡ cài đặt.

+1

Tôi không hiểu, phương pháp Gỡ cài đặt sẽ lưu savedState chứ không phải tên dịch vụ. –

+0

Bạn nói đúng. Cập nhật với một ví dụ khác tôi tìm thấy .. –

+0

InstallContext không có trong System.ServicesProcess – ArthNRick

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

Vì bất kỳ lý do gì, nó tuyên bố dịch vụ chưa được cài đặt, nhưng đúng vậy. Đó là một dịch vụ bên ngoài được viết bằng .NET. Tôi có quyền quản trị trong quá trình của mình. – modiX

0

Dịch vụ được liệt kê trong Windows Registry dưới HKLM \ SYSTEM \ CurrentControlSet \ services. Nếu bạn loại bỏ khóa tương ứng với tên được cung cấp của dịch vụ (không phải tên hiển thị; tên hiển thị mà nó đã đăng ký), bạn sẽ có dịch vụ "chưa đăng ký" một cách hiệu quả. Bạn có thể làm điều này theo lập trình với đối tượng Microsoft.Win32.Registry. Bạn sẽ cần quyền CAS trên máy tính thực thi để sửa đổi các mục đăng ký.

+0

Điều này không được khuyến nghị – Onkelborg

+3

+1 Điều này có thể không được khuyến khích, nó có lợi ích thực sự làm việc. :) Một lựa chọn khác là 'CreateProcess sc.exe delete ServiceName'. – Andomar

1

Nếu những gì bạn đang cố gắng làm là gỡ cài đặt dịch vụ, bạn đã viết, từ bên trong và bạn đã thêm trình cài đặt vào dự án, bạn có thể đơn giản khởi tạo lớp Trình cài đặt và gọi Gỡ cài đặt. Ví dụ, nếu bạn kéo một trình cài đặt vào các dịch vụ thiết kế và đặt tên mà thành phần "ProjectInstaller", bạn có thể nhận được dịch vụ của bạn để gỡ bỏ cài đặt chính nó với đoạn mã sau:

var installer = new ProjectInstaller(); 
installer.Uninstall(null); 
Các vấn đề liên quan