Cách giải quyết Dịch vụ được chỉ định đã được đánh dấu cho lỗi xóa xóa


585

Tôi cố gắng xóa Dịch vụ Windows sc delete <service name>và gặp phải lỗi sau:

[SC] Xóa Dịch vụ KHÔNG CÓ 1072:

Các dịch vụ được chỉ định đã được đánh dấu để xóa.

Những gì tôi đã làm:

Vấn đề vẫn tồn tại.

Bước tiếp theo là gì?


4
Một khởi động lại thường sẽ xóa bất kỳ trạng thái kéo dài.
Damien_The_Unbeliever

14
Tôi biết. Nhưng tôi nghĩ về một giải pháp ít triệt để hơn. Khởi động lại ba mươi lần mỗi ngày sẽ không phải là một giải pháp chấp nhận được trong trường hợp của tôi.
Arseni Mourzenko

54
"tại sao bạn xóa dịch vụ này thường xuyên?" : Tôi đang viết một dịch vụ Windows. Mỗi lần biên dịch, nó sẽ được khởi động lại. "Tuy nhiên, việc hack trong registry 30 lần mỗi ngày có được chấp nhận không?" : Tổng cộng. Xóa khóa khỏi sổ đăng ký không buộc tôi phải lưu tất cả mọi thứ, đóng mọi ứng dụng đã mở, đợi trong một phút và sau đó mở lại mọi thứ.
Arseni Mourzenko

46
Tôi đã viết các dịch vụ windows. Trừ khi bạn thay đổi mã thực tế thực hiện đăng ký, không cần phải gỡ cài đặt và cài đặt lại mã mỗi khi bạn thực hiện quá trình xây dựng. Chừng nào đường dẫn vẫn như cũ, thông tin đăng ký cũ sẽ vẫn còn hiệu lực.
Damien_The_Unbeliever

4
@NickTurner - liên kết đến bất kỳ báo cáo lỗi? Bất cứ lỗi nào bạn đề cập đến, tôi đã không gặp phải. Và tôi không chắc chắn MSI tham gia như thế nào vì có lẽ chúng ta đang nói về việc xây dựng và chạy các dịch vụ trên máy dev (ít nhất đó có vẻ là bối cảnh cho câu hỏi 5 năm tuổi này)
Damien_The_Unbeliever

Câu trả lời:


1245

Có thể có một số nguyên nhân dẫn đến dịch vụ bị mắc kẹt trong hệ thống được đánh dấu để xóa xóa.

  1. Process Explorer của SysIternals được mở . Đóng nó sẽ dẫn đến tự động loại bỏ dịch vụ.

  2. Trình quản lý tác vụ được mở .

  3. Bảng điều khiển Microsoft Management (MMC) được mở . Để đảm bảo tất cả các trường hợp được đóng lại, chạy taskkill /F /IM mmc.exe.

  4. Bảng điều khiển dịch vụ được mở . Điều này giống như điểm trước, vì bảng điều khiển Dịch vụ được lưu trữ bởi MMC.

  5. Trình xem sự kiện được mở . Một lần nữa, điều này giống như điểm thứ ba.

  6. Khóa HKEY_LOCAL_MACHINE \ HỆ THỐNG \ CurrentControlset \ Services \ {tên dịch vụ} tồn tại .

  7. Một số người khác đã đăng nhập vào máy chủ và có một trong những ứng dụng được đề cập trước đó được mở.

  8. Một phiên bản của Visual Studio được sử dụng để gỡ lỗi dịch vụ đang mở.


9
Quản lý công việc dường như làm như vậy. Và như được lưu ý dưới đây để mở bảng điều khiển Dịch vụ cũng có thể gây ra điều này.
CodingBarfield 7/214

4
... và nếu đóng tất cả những điều này vẫn không giúp ích và bạn vẫn thấy dịch vụ là "được đánh dấu để xóa", hãy đăng xuất đơn giản thay vì khởi động lại đầy đủ. nó đã giúp tôi một vài lần
Nedko

2
Một quy trình làm việc chung: các đồng nghiệp bất chính của bạn cũng được đăng nhập vào máy chủ từ xa và tất cả họ đều có một cái gì đó mở ...
Chris O

72
Đóng bảng điều khiển dịch vụ đã giải quyết vấn đề này cho tôi! Quá trình của tôi là như sau: Trong Dấu nhắc lệnh của Công cụ gốc VS2012 x64 -> Điều hướng đến thư mục với dịch vụ có thể thực hiện được -> installutil / u servicename.exe (để gỡ cài đặt dịch vụ lỗi thời) -> sao chép dịch vụ đã xây dựng mới - > installutil servicename.exe (để cài đặt dịch vụ cập nhật) . Tôi thường có thể gỡ cài đặt và cài đặt lại ngay mà không gặp vấn đề gì. Cho đến khi tôi ngẫu nhiên không thể. Đóng bảng điều khiển dịch vụ đã giải quyết nó. Cảm ơn vì tiền hỗ trợ!
thehelix

17
Theo tôi, Process Explorer là một cái lớn ở đây. Tôi đề nghị vùi nó và / hoặc di chuyển nó lên đầu danh sách.
Coxy

224

Điều này cũng có thể được gây ra bằng cách để bảng điều khiển Dịch vụ mở. Windows sẽ không thực sự xóa dịch vụ cho đến khi nó bị đóng.


3
Như tôi đã chỉ ra trong câu hỏi của mình, Bảng điều khiển quản lý Microsoft Microsoft đã đóng cửa trong quá trình kiểm tra.
Arseni Mourzenko

25
Trong trường hợp của tôi, bảng điều khiển Dịch vụ là vấn đề. Ngay sau khi tôi đóng nó và mở lại, các dịch vụ đã bị xóa.
Farrukh Najmi

3
Khó có thể tin rằng việc giữ cho cửa sổ mở là trường hợp ... Cảm ơn bạn!
Karol Tyl

Điều này cũng hiệu quả với tôi, mặc dù thật lạ là có rất nhiều trường hợp chỉ cần nhấn F5 sẽ làm mới danh sách với dịch vụ đã bị xóa.
Steve Smith

1
Bạn đã cứu ngày của tôi
Pranoy Sarkar

50

Tôi đã có cùng một vấn đề, cuối cùng tôi quyết định giết quá trình dịch vụ.

cho nó thử các bước dưới đây:

  • nhận id quá trình dịch vụ với

    sc queryex <service name>

  • giết quá trình với

    taskkill /F /PID <Service PID>


2
PID của tôi là 0 vì vậy tôi không nên giết nó!
cướp

bạn có thể gỡ cài đặt dịch vụ cho các bước bên dưới 1- chạy cmd 2- đổi hướng sang tệp .exe của dịch vụ của bạn xác định rằng 3- thực thi lệnh installutil / u <yourfilename.exe>
Ali Sadri

+1 cho sc queryex Tôi sẽ có thể sử dụng điều đó để có được PID nếu tôi muốn đính kèm trình gỡ lỗi
Paul McCarthy

44

Trong trường hợp của tôi, nó hoạt động sau khi đóng Services. Kiểm tra nếu Services.mscmở, nếu có đóng nó và kiểm tra bất kỳ quá trình dịch vụ được tìm thấy trong Task Manager.


13

Điều đó có nghĩa là dịch vụ vẫn được liệt kê là bị vô hiệu hóa trong services.msc. Chỉ cần đóng services.msc và mở lại với tư cách quản trị viên ... Dịch vụ sẽ không được liệt kê. Bây giờ, cài đặt dịch vụ bằng lệnh,

installutil "đường dẫn dịch vụ"


11

Xóa các khóa đăng ký như đề xuất ở trên khiến dịch vụ của tôi bị kẹt trong trạng thái dừng. Các thủ tục sau đây làm việc cho tôi:

mở trình quản lý tác vụ> chọn tab dịch vụ> chọn dịch vụ> nhấp chuột phải và chọn "đi xử lý"> nhấp chuột phải vào quy trình và chọn Kết thúc quá trình

Dịch vụ nên đi sau đó


7

Đã phát hiện thêm một điều cần kiểm tra - hãy tìm trong Trình quản lý tác vụ - nếu người dùng khác được kết nối với hộp này, ngay cả khi họ bị 'ngắt kết nối', bạn phải thực sự đăng xuất chúng để dịch vụ cuối cùng xóa.


4
Không cần thiết. Bạn chỉ cần đảm bảo mọi người thoát khỏi Bảng điều khiển Microsoft Management Console (MMC) và bảng điều khiển Dịch vụ.
Hầu tước Lorne

6

Có vẻ như trên các phiên bản Windows muộn hơn Windows 7 (chưa được xác minh, nhưng theo kinh nghiệm mới nhất với Windows Server 2012 R2), Trình quản lý điều khiển dịch vụ (SCM) nghiêm ngặt hơn.

Mặc dù trên Windows 7, nó chỉ sinh ra một quy trình khác, nhưng hiện tại nó đang kiểm tra xem liệu quy trình dịch vụ có còn hay không và có thể trả về ERROR_SERVICE_MARKED_FOR_DELETE (1072) cho bất kỳ cuộc gọi tiếp theo nào tới CreatService / DeleteService ngay cả khi dịch vụ dường như bị dừng.

Tôi đang nói về mã API Windows ở đây, nhưng tôi muốn phác thảo rõ ràng những gì đang xảy ra, vì vậy trình tự này có thể dẫn đến lỗi được đề cập:

SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);

SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);

SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state

DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;

// any further calls to CreateService/DeleteService will fail
// if service process is still around

Lý do một quy trình dịch vụ vẫn còn tồn tại sau khi nó đã báo cáo trạng thái SERVICE_STOPPED của nó không gây ngạc nhiên. Đó là một quy trình thông thường, có luồng chính bị 'kẹt' trong lệnh gọi StartServiceCtrlDispatcherAPI, do đó trước tiên nó phản ứng với hành động kiểm soát dừng, nhưng sau đó phải thực hiện chuỗi mã còn lại.

Thật không may, SCM / OS không xử lý việc này đúng với chúng tôi. Một giải pháp lập trình khá đơn giản và chính xác: có được xử lý quy trình thực thi dịch vụ trước khi dừng dịch vụ, sau đó đợi xử lý này được báo hiệu.

Nếu tiếp cận vấn đề từ góc độ quản trị hệ thống, giải pháp cũng là chờ quá trình dịch vụ biến mất hoàn toàn.


6

Đây là những gì làm việc cho tôi: - Tôi gặp vấn đề tương tự: dịch vụ của tôi bị kẹt trong 'được đánh dấu để xóa'. - Tôi đã mở services.msc Dịch vụ của tôi hiển thị như đang chạy, mặc dù nó đã được gỡ cài đặt. - Tôi đã bấm Dừng Nhận được thông báo lỗi, cho biết dịch vụ không ở trạng thái nhận thông báo điều khiển. Tuy nhiên, dịch vụ đã dừng lại. - Đóng dịch vụ.msc. - Dịch vụ mở lại.msc. - Dịch vụ đã biến mất (không còn hiển thị trong danh sách dịch vụ).

(Môi trường là Windows 7.)


2
Windows 2008 tại đây, tôi phải đóng bảng điều khiển dịch vụ
Mathijs Segers

5

Trong trường hợp của tôi, tôi thực thi taskkill /f /im dongleserver.exe, nơidongleserver.exe tập tin exe của chương trình của tôi .

Sau đó tôi có thể cài đặt lại chương trình của mình.


4

Trong trường hợp của tôi, nó được gây ra bởi ngoại lệ chưa được xử lý trong khi tạo nguồn eventLog. Sử dụng thử bắt để xác định nguyên nhân.


4

Đóng tất cả các cửa sổ hiện đang mở theo sau bằng cách chạy lệnh sau đã giải quyết vấn đề cho tôi:

taskkill /F /IM mmc.exe

3

Đóng bảng điều khiển dịch vụ theo đề xuất của một số câu trả lời ở đây đã cho phép tôi xóa dịch vụ. Trong kịch bản của tôi, đây chỉ là một sửa chữa ngắn hạn vì tất cả các lần cài đặt lại và gỡ bỏ dịch vụ sau đó sẽ yêu cầu tôi thực hiện các bước bổ sung này. Xem lại tệp web.config của tôi, phát hiện ra rằng có một lỗi đã được sửa, cho phép tôi dễ dàng xóa dịch vụ mà không cần đóng thêm bước điều khiển dịch vụ.


1

Điều này làm việc cho tôi.

  • Mở trình quản lý tác vụ
  • Chọn tab dịch vụ
  • Chọn dịch vụ có vấn đề
  • Nhấp chuột phải và chọn "Đi đến chi tiết"
  • Nhấp chuột phải vào dịch vụ và chọn "Kết thúc cây quá trình"

Cây quá trình kết thúc sẽ kết thúc quá trình và tất cả các quy trình được tạo bởi quy trình.

Sau đó, bạn có thể cài đặt lại dịch vụ.


1

Trong trường hợp của tôi, tên dịch vụ là 'Màn hình' cũng được sử dụng bởi một dịch vụ windows có tên là 'Màn hình', khi tôi cố cập nhật dịch vụ của mình, tôi đã thử gỡ cài đặt chúng, trình cài đặt đã cố gắng gỡ bỏ dịch vụ 'Màn hình' mà nó không thể, và cài đặt luôn luôn quay trở lại.

Tôi đã kết thúc việc đổi tên dịch vụ của mình thành một cái gì đó khác


0

Nếu các bước được cung cấp bởi @MainMa không hoạt động, hãy làm theo các bước sau

Bước 1 Thử giết tiến trình từ trình quản lý tác vụ windows hoặc sử dụng taskkill / F / PID. Bạn có thể tìm thấy pid của quá trình bằng lệnh 'sc queryex'. Hãy thử bước tiếp theo nếu bạn vẫn không thể gỡ cài đặt.

Bước 2 Nếu ở trên

Chạy Autorun cho Windows Tìm kiếm dịch vụ theo tên và xóa kết quả.


0

Lý do chính cho lỗi là quá trình không được dừng lại. để giải quyết nó bắt đầu trình quản lý tác vụ đi đến các dịch vụ và xem liệu bạn vẫn có thể thấy dịch vụ của mình hơn là đi đến quy trình của dịch vụ đó và kết thúc quá trình. Hơn vấn đề sẽ được giải quyết hoàn toàn.


0

Tôi đã gặp vấn đề này khi tôi đang sử dụng Trình xác minh ứng dụng để xác minh dịch vụ giành chiến thắng của mình. Ngay cả sau khi tôi đóng App Ver, dịch vụ của tôi đã bị xóa. Chỉ xóa dịch vụ khỏi App Ver đã giải quyết vấn đề và dịch vụ đã bị xóa ngay lập tức. Có vẻ như một số quy trình vẫn sử dụng dịch vụ của bạn sau khi bạn cố xóa một.


0

các bước để làm theo:

bước 1 đi đến vị trí C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

lệnh chạy bước 2 : installutil / u full-path / servicename.exe

bước 3 đóng bảng dịch vụ và mở lại

lệnh chạy bước 4 : installutil full-path / servicename.exe


1
một lưu ý phụ: installutil chỉ hoạt động với tư cách quản trị viên, vì vậy hãy mở shell với tư cách quản trị viên.
ingconti

0

Hầu hết các dịch vụ có thể xóa không thành công vì

protected override void OnStop()

lỗi ném khi dừng một dịch vụ. gói những thứ bên trong một cái bẫy thử sẽ ngăn chặn lỗi đánh dấu xóa

protected override void OnStop()
{
            try
            {
                //things to do
            }
            catch (Exception)
            {
            }

}


0

Đôi khi, điều này có thể xảy ra trong quá trình xóa dịch vụ thông qua tập lệnh phiên từ xa PowerShell, đặc biệt là khi bạn đang cố gắng xóa dịch vụ nhiều lần. Trong trường hợp này, hãy thử tạo lại một phiên trước khi xóa:

Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name  -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession
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.