Làm cách nào để gỡ cài đặt Dịch vụ Windows khi không có tệp thực thi nào trên hệ thống?


166

Làm cách nào để gỡ cài đặt Dịch vụ Windows khi không có tệp thực thi nào trên hệ thống? Tôi không thể chạy installutil -uvì không thể thực thi được trên hệ thống. Tôi vẫn có thể thấy một mục cho dịch vụ trong bảng điều khiển Dịch vụ.

Lý do cho trạng thái này có lẽ là do sự cố trong gói msi không xóa dịch vụ một cách chính xác, nhưng làm cách nào để khắc phục khi dịch vụ ở trạng thái này?


Câu trả lời:


325

Bạn sẽ có thể gỡ cài đặt nó bằng sc.exe (Tôi nghĩ rằng nó được bao gồm trong Bộ tài nguyên Windows) bằng cách chạy phần sau trong dấu nhắc lệnh "quản trị viên":

sc.exe delete <service name>

nơi <service name>là tên của dịch vụ bản thân như bạn thấy nó trong việc quản lý dịch vụ giao diện điều khiển, không phải của các exe.

Bạn có thể tìm thấy sc.exe trong thư mục Hệ thống và nó cần đặc quyền Quản trị để chạy. Thêm thông tin trong bài viết Microsoft KB này .

Ngoài ra, bạn có thể gọi trực tiếp api DeleteService () . Cách đó phức tạp hơn một chút, vì bạn cần phải xử lý trình quản lý kiểm soát dịch vụ thông qua OpenSCManager () , nhưng mặt khác, nó cho phép bạn kiểm soát nhiều hơn những gì đang xảy ra.


Nó đã làm chính xác những gì tôi muốn và loại bỏ dịch vụ khỏi registry. Nó không hiển thị trong bảng điều khiển Dịch vụ nữa. Cảm ơn!
Magnus Lindhe

Tôi nhận được "Truy cập bị từ chối." Phải làm gì tiếp theo?
Nick

4
Chỉ là một lưu ý cho bất cứ ai cố gắng thực thi lệnh trong Phương thức 1 trong PowerShell: sc không dành cho giao tiếp với người quản lý điều khiển dịch vụ. Đó là lệnh Set-Content. Sử dụng sc.exe thay thế.
Yasser Sinjab

1
Nếu bạn gặp lỗi 1072, hãy đảm bảo rằng bạn không mở bảng điều khiển dịch vụ (xem câu hỏi khác này )
Giles

Tôi đã nhận được lỗi dưới đây. [SC] OpenService FAILED 1060: Dịch vụ được chỉ định không tồn tại dưới dạng dịch vụ được cài đặt. Sau đó đã thử tương tự với vỏ điện và nó hoạt động!
crazydan

24

Xóa dịch vụ Windows qua Registry

Rất dễ dàng để xóa một dịch vụ khỏi registry nếu bạn biết đúng đường dẫn. Đây là cách tôi đã làm điều đó:

  1. Chạy Regedit hoặc Regedt32

  2. Chuyển đến mục đăng ký "HKEY_LOCAL_MACHINE / HỆ THỐNG / CurrentControlset / Services"

  3. Hãy tìm dịch vụ mà bạn muốn xóa và xóa nó. Bạn có thể nhìn vào các phím để biết tập tin nào mà dịch vụ đang sử dụng và cũng xóa chúng (nếu cần).

Xóa dịch vụ Windows qua cửa sổ lệnh

Ngoài ra, bạn cũng có thể sử dụng dấu nhắc lệnh và xóa dịch vụ bằng lệnh sau:

sc xóa

Bạn cũng có thể tạo dịch vụ bằng cách sử dụng lệnh sau

sc tạo "MorganTechService" binpath = "C: \ Chương trình tập tin \ MorganTechSPace \ myservice.exe"

Lưu ý: Bạn có thể phải khởi động lại hệ thống để cập nhật danh sách trong trình quản lý dịch vụ.


3
Là làm theo cách đăng ký an toàn? Là "kết quả cuối cùng" của cách đăng ký giống như "kết quả cuối cùng" của sc delete?
Pacerier

5
Không, tôi chỉ cố gắng xóa một dịch vụ từ regedit trực tiếp. Do đó, hiện tại mục nhập của dịch vụ tôi muốn xóa vẫn còn trong Dịch vụ, trong khi Mô tả về dịch vụ hiển thị: "<Không thể đọc Mô tả. Mã lỗi: 2>"
GJ.

11

tìm thấy ở đây

Tôi mới thử trên Windows XP, nó đã hoạt động.

máy tính cục bộ: sc \\. xóa [tên dịch vụ]

  Deleting services in Windows Server 2003

  We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.

  To delete a service: 

  Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.

  Enter command:

  sc servername delete servicename

  For instance, sc \\dc delete myservice

  (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)

  Below is the official help of all sc functions:

  DESCRIPTION:
    SC is a command line program used for communicating with the
    NT Service Controller and services. 
  USAGE:
          sc

10

Đây là kịch bản powershell để xóa một dịch vụ foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()

9

Cách ưa thích của tôi để làm điều này là sử dụng ứng dụng Sysiternals Autorun . Chỉ cần chọn dịch vụ và nhấn xóa.


Tại sao không chỉ đơn giản là sử dụng sc delete?
Pacerier

3

Tạo một bản sao thực thi của cùng một dịch vụ và dán nó vào cùng một đường dẫn của dịch vụ hiện có và sau đó gỡ cài đặt.


Đó là một gợi ý tốt. Nếu nó không hoạt động, anh ta có thể cần phải cài đặt lại, chạy installutil -u, sau đó gỡ cài đặt
wcm

chúng ta phải tạo bản sao của cùng một exe hoặc đổi tên bất kỳ tập tin nào khác sẽ hoạt động tốt?
Imran Rizvi

@Samiksha, tôi nghĩ anh ta nói anh ta không có " bản sao thực thi "?
Pacerier

3

Tôi sẽ sử dụng PowerShell cho việc này

Remove-Service -Name "TestService"

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.man Quản lý / remove-service


chỉ khả dụng trong PS6
BozoJoe

Tôi đã nhận được lỗi dưới đây. [SC] OpenService FAILED 1060: Dịch vụ được chỉ định không tồn tại dưới dạng dịch vụ được cài đặt. Sau đó đã thử sc xóa <tên dịch vụ> với vỏ điện và nó hoạt động! Nhờ ý tưởng vỏ điện.
crazydan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.