วิธีแก้ไขข้อผิดพลาด“ บริการที่ระบุถูกทำเครื่องหมายเพื่อลบ” ข้อผิดพลาด


584

ฉันพยายามลบบริการ Windows ด้วยsc delete <service name>และพบข้อผิดพลาดต่อไปนี้:

[SC] DeleteService ล้มเหลว 1072:

บริการที่ระบุถูกทำเครื่องหมายเพื่อลบ

สิ่งที่ฉันทำไปแล้ว:

ปัญหายังคงมีอยู่

ขั้นตอนต่อไปคืออะไร?


4
การรีบูตปกติควรล้างสถานะอ้อยอิ่งใด ๆ
Damien_The_Unbeliever

14
ฉันรู้ว่า. แต่ฉันคิดถึงวิธีแก้ปัญหาที่รุนแรงน้อยกว่า การรีบูตเครื่องวันละสามสิบครั้งจะไม่ใช่โซลูชันที่ยอมรับได้ในกรณีของฉัน
Arseni Mourzenko

54
"ทำไมคุณถึงลบบริการนี้เป็นประจำ" : ฉันกำลังเขียนบริการของ Windows ทุกครั้งที่มีการรวบรวมควรเริ่มต้นใหม่ "ยังยอมรับการเจาะระบบในรีจิสทรี 30 ครั้งต่อวัน" : ทั้งหมด การลบคีย์ออกจากรีจิสตรีไม่ได้บังคับให้ฉันบันทึกทุกอย่างปิดแอปที่เปิดอยู่ทั้งหมดรอหนึ่งนาทีแล้วเปิดใหม่ทุกอย่าง
Arseni Mourzenko

46
ฉันเขียนบริการ windows ยกเว้นว่าคุณกำลังเปลี่ยนรหัสจริงที่ทำการลงทะเบียนไม่จำเป็นต้องถอนการติดตั้งและติดตั้งใหม่ทุกครั้งที่คุณสร้างบิลด์ ตราบใดที่เส้นทางยังคงเหมือนเดิมข้อมูลการลงทะเบียนแบบเก่าจะยังคงใช้ได้
Damien_The_Unbeliever

4
@NickTurner - เชื่อมโยงไปยังรายงานข้อผิดพลาดใด ๆ อะไรก็ตามที่คุณอ้างถึงฉันไม่เจอ และฉันไม่แน่ใจว่า MSI เกี่ยวข้องกันอย่างไรเนื่องจากเรากำลังพูดถึงการสร้างและใช้งานบริการบนเครื่อง dev (อย่างน้อยก็ดูเหมือนจะเป็นบริบทของคำถามอายุ 5 ปีนี้)
Damien_The_Unbeliever

คำตอบ:


1243

อาจมีสาเหตุหลายประการที่ทำให้บริการติดอยู่ใน“ ทำเครื่องหมายเพื่อลบ”

  1. กระบวนการ SysInternals' Explorer เปิด การปิดบริการควรนำไปสู่การลบบริการโดยอัตโนมัติ

  2. Task Manager ที่มีการเปิด

  3. เปิด Microsoft Management Console (MMC)แล้ว taskkill /F /IM mmc.exeเพื่อให้แน่ใจว่าทุกกรณีจะปิดการทำงาน

  4. เปิดบริการคอนโซลแล้ว นี่เป็นจุดเดียวกับก่อนหน้านี้เนื่องจาก MMC เป็นโฮสต์ของบริการ

  5. แสดงเหตุการณ์ที่มีการเปิด นี่เป็นจุดเดียวกับจุดที่สาม

  6. การ HKEY_LOCAL_MACHINE คีย์ \ SYSTEM \ CurrentControlSet \ Services \ {} ชื่อบริการที่มีอยู่

  7. มีคนอื่นเข้าสู่เซิร์ฟเวอร์และเปิดแอปพลิเคชั่นที่กล่าวถึงก่อนหน้านี้

  8. อินสแตนซ์ของ Visual Studio ที่ใช้ในการดีบักบริการเปิดอยู่


9
ตัวจัดการงานดูเหมือนจะทำเช่นเดียวกัน และตามที่ระบุไว้ด้านล่างการเปิดคอนโซลบริการอาจทำให้เกิดปัญหานี้เช่นกัน
CodingBarfield

4
... และหากปิดสิ่งเหล่านี้ทั้งหมดก็ยังไม่ช่วยและคุณยังเห็นบริการเป็น "ทำเครื่องหมายสำหรับการลบ" ทำง่ายออกจากระบบแทนการรีสตาร์ทเต็ม มันช่วยฉันสองสามครั้ง
Nedko

2
หนึ่งในขั้นตอนการทำงานร่วมกันกับเพื่อนร่วมงานสามานย์ของคุณนอกจากนี้ยังมีการบันทึกลงในเซิร์ฟเวอร์ระยะไกลและพวกเขาทั้งหมดมีบางสิ่งบางอย่างที่เปิด ...
คริสโอ

72
การปิดบริการคอนโซลช่วยแก้ปัญหานี้ให้ฉัน! กระบวนการของฉันเป็นดังต่อไปนี้: ใน VS2012 x64 Native Tools Command Prompt -> นำทางไปยังไดเรกทอรีด้วยบริการ exectuable -> installutil / u servicename.exe (ถอนการติดตั้งบริการล้าสมัย) -> คัดลอก exe บริการใหม่ที่สร้างขึ้น - > installutil servicename.exe (การติดตั้งบริการปรับปรุง) โดยทั่วไปฉันสามารถถอนการติดตั้งและติดตั้งใหม่ได้ทันทีโดยไม่มีปัญหา จนกว่าฉันจะสุ่มไม่สามารถ การปิดบริการคอนโซลแก้ไข ขอบคุณสำหรับทิป!
thehelix

17
Process Explorer นั้นใหญ่มากในความคิดของฉัน ฉันแนะนำให้ใช้รูปแบบนี้และ / หรือย้ายไปด้านบนของรายการ
Coxy

222

สิ่งนี้อาจเกิดจากการเปิดคอนโซลบริการทิ้งไว้ Windows จะไม่ลบบริการจนกว่าจะปิด


3
ตามที่ฉันระบุในคำถามของฉัน“ Microsoft Management Console จะปิด” ระหว่างการทดสอบ
Arseni Mourzenko

25
ในกรณีของฉันคอนโซลบริการเป็นปัญหา ทันทีที่ฉันปิดและเปิดใหม่บริการที่ถูกลบก็หายไป
Farrukh Najmi

3
ยากที่จะเชื่อว่าการเปิดหน้าต่างเป็นกรณี ... ขอบคุณ!
Karol Tyl

สิ่งนี้ก็ใช้ได้กับฉันด้วยเช่นกันถึงแม้ว่าจะมีหลายกรณีที่การกดปุ่ม F5 จะเป็นการรีเฟรชรายการโดยลบบริการออก
Steve Smith

1
คุณบันทึกวันของฉัน
Pranoy Sarkar

50

ฉันมีปัญหาเดียวกันในที่สุดฉันก็ตัดสินใจที่จะฆ่ากระบวนการบริการ

มันลองขั้นตอนด้านล่าง:

  • รับรหัสกระบวนการของการบริการด้วย

    sc queryex <service name>

  • กระบวนการฆ่าด้วย

    taskkill /F /PID <Service PID>


2
PID ของฉันคือ 0 ดังนั้นฉันไม่ควรฆ่ามัน!
ปล้น

คุณสามารถถอนการติดตั้งบริการสำหรับทำตามขั้นตอนที่ 1 - รัน cmd 2- เปลี่ยนทิศทางไปยังไฟล์. exe ของบริการของคุณค้นหาว่า 3- รันคำสั่ง installutil / u <yourfilename.exe>
Ali Sadri

+1 สำหรับ sc queryex ฉันจะสามารถใช้เพื่อรับ PID ถ้าฉันต้องการแนบ debugger
Paul McCarthy

44

Servicesในกรณีของฉันมันทำงานหลังจากปิด ตรวจสอบว่าServices.mscมีการเปิดถ้าใช่ปิดมันและตรวจสอบขั้นตอนการให้บริการใด ๆ Task Managerที่พบใน


13

นั่นหมายความว่าบริการจะยังคงแสดงเป็นปิดใช้งานใน services.msc เพียงแค่ปิด services.msc แล้วเปิดใหม่ในฐานะผู้ดูแลระบบ ... บริการจะไม่ปรากฏในรายการ ตอนนี้ติดตั้งบริการโดยใช้คำสั่ง

installutil "เส้นทางการให้บริการ"


11

การลบคีย์รีจิสตรีตามที่แนะนำข้างต้นทำให้บริการของฉันติดค้างอยู่ในสถานะหยุดทำงาน ขั้นตอนต่อไปนี้ใช้ได้สำหรับฉัน:

เปิดตัวจัดการงาน> เลือกแท็บบริการ> เลือกบริการ> คลิกขวาแล้วเลือก "ไปที่กระบวนการ"> คลิกขวาที่กระบวนการและเลือกสิ้นสุดกระบวนการ

บริการควรจะหายไปหลังจากนั้น


7

ค้นพบอีกสิ่งหนึ่งในการตรวจสอบ - ดูในตัวจัดการงาน - หากผู้ใช้รายอื่นเชื่อมต่อกับช่องนี้แม้ว่าพวกเขาจะ 'ตัดการเชื่อมต่อ' คุณจะต้องออกจากระบบเพื่อรับบริการเพื่อลบในที่สุด


4
ไม่จำเป็น. คุณเพียงแค่ต้องให้แน่ใจว่าทุกคนออกจากแผงควบคุมของ Microsoft Management (MMC) และบริการ
มาร์ควิสแห่ง Lorne

6

ดูเหมือนว่าใน Windows รุ่นที่ใหม่กว่า Windows 7 (ไม่ผ่านการตรวจสอบ แต่จากประสบการณ์ล่าสุดกับ Windows Server 2012 R2) Service Control Manager (SCM) จะเข้มงวดกว่านี้

ในขณะที่บน Windows 7 นั้นเพิ่งวางไข่กระบวนการอื่นตอนนี้มันกำลังตรวจสอบว่ากระบวนการบริการยังคงอยู่หรือไม่และอาจส่งคืน ERROR_SERVICE_MARKED_FOR_DELETE (1072) สำหรับการเรียกไปยัง

ฉันกำลังพูดถึงรหัส Windows API ที่นี่ แต่ฉันต้องการอธิบายสิ่งที่เกิดขึ้นอย่างชัดเจนดังนั้นลำดับนี้อาจทำให้เกิดข้อผิดพลาดดังกล่าว:

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

เหตุผลที่กระบวนการบริการยังคงอยู่หลังจากที่ได้รายงานสถานะ SERVICE_STOPPED แล้วไม่น่าแปลกใจ เป็นกระบวนการปกติที่มีเธรดหลัก 'ติดอยู่' ในการเรียกใช้StartServiceCtrlDispatcherAPI ดังนั้นก่อนอื่นจะตอบสนองต่อการดำเนินการควบคุมการหยุด แต่จากนั้นจะต้องดำเนินการตามลำดับรหัสที่เหลืออยู่

เป็นเรื่องน่าเสียดายที่ SCM / OS ไม่สามารถจัดการสิ่งนี้ได้อย่างถูกต้องสำหรับเรา วิธีแก้ปัญหาเชิงโปรแกรมเป็นเรื่องง่ายและถูกต้อง: ขอรับการจัดการกระบวนการของเซอร์วิสที่ปฏิบัติการได้ก่อนที่จะหยุดบริการจากนั้นรอให้หมายเลขอ้างอิงนี้กลายเป็นสัญญาณ

หากเข้าใกล้ปัญหาจากมุมมองการบริหารระบบการแก้ปัญหาคือการรอให้กระบวนการบริการหายไปอย่างสมบูรณ์


6

นี่คือสิ่งที่ใช้งานได้สำหรับฉัน: - ฉันตีปัญหาเดียวกัน: บริการของฉันติดอยู่ใน 'ทำเครื่องหมายเพื่อลบ' - ฉันเปิด services.msc บริการของฉันปรากฏว่าทำงานแม้ว่าจะถูกถอนการติดตั้งไปแล้ว - ฉันคลิกหยุดรับข้อความแสดงข้อผิดพลาดแจ้งว่าบริการไม่ได้อยู่ในสถานะที่จะรับข้อความควบคุม อย่างไรก็ตามการบริการก็หยุดลง - ปิดบริการ - เปิดบริการอีกครั้ง - บริการได้หายไป (ไม่ปรากฏในรายการบริการ)

(สภาพแวดล้อมเป็น Windows 7)


2
Windows 2008 ที่นี่ฉันต้องปิดแผงบริการ
Mathijs Segers

5

ในกรณีของฉันฉันรันไฟล์ exe ของโปรแกรมของฉันอยู่taskkill /f /im dongleserver.exeที่ไหนdongleserver.exe

จากนั้นฉันสามารถติดตั้งโปรแกรมใหม่ได้แล้ว


4

ในกรณีของฉันมันเกิดจากข้อยกเว้นที่ไม่สามารถจัดการได้ในขณะที่สร้างแหล่ง EventLog ใช้ลองจับเพื่อระบุจุดสาเหตุ


4

การปิดหน้าต่างทุกบานที่เปิดอยู่ในปัจจุบันตามด้วยการเรียกใช้คำสั่งต่อไปนี้แก้ไขปัญหาให้ฉัน:

taskkill /F /IM mmc.exe

3

การปิดคอนโซลบริการตามคำแนะนำของคำตอบสองสามข้อนี้ทำให้ฉันสามารถลบบริการได้ ในสถานการณ์ของฉันนี่เป็นเพียงการแก้ไขระยะสั้นเนื่องจากการติดตั้งใหม่และการลบบริการในภายหลังทั้งหมดจะทำให้ฉันต้องทำตามขั้นตอนเพิ่มเติมเหล่านี้ ตรวจสอบไฟล์ web.config ของฉันพบว่ามีข้อผิดพลาดที่เมื่อแก้ไขแล้วทำให้ฉันสามารถลบบริการได้ง่ายโดยไม่ต้องปิดขั้นตอนเพิ่มเติมของคอนโซลบริการ


1

มันใช้งานได้สำหรับฉัน

  • เปิดตัวจัดการงาน
  • เลือกแท็บบริการ
  • เลือกบริการที่มีปัญหา
  • คลิกขวาและเลือก "ไปที่รายละเอียด"
  • คลิกขวาที่บริการและเลือก "จบกระบวนการต้นไม้"

ต้นไม้กระบวนการสิ้นสุดจะสิ้นสุดกระบวนการและกระบวนการทั้งหมดที่สร้างขึ้นโดยกระบวนการ

จากนั้นคุณสามารถติดตั้งบริการใหม่ได้


1

ในกรณีของฉันชื่อบริการคือ 'ตรวจสอบ' ซึ่งใช้โดยบริการ windows ที่เรียกว่า 'ตรวจสอบ' เมื่อฉันพยายามอัปเดตบริการของฉันฉันพยายามถอนการติดตั้งพวกเขาติดตั้งพยายามลบบริการตรวจสอบของ Windows ไม่สามารถทำได้และการติดตั้งจะย้อนกลับมาเสมอ

ฉันสิ้นสุดการเปลี่ยนชื่อบริการเป็นอย่างอื่น


0

หากขั้นตอนที่ระบุโดย @MainMa ไม่ทำงานให้ทำตามขั้นตอนต่อไปนี้

ขั้นตอนที่ 1 ลองฆ่ากระบวนการจากตัวจัดการงานของ windows หรือใช้ taskkill / F / PID คุณสามารถค้นหา pid ของกระบวนการได้โดยใช้คำสั่ง 'sc queryex' ลองขั้นตอนต่อไปถ้าคุณยังถอนการติดตั้งไม่ได้

ขั้นตอนที่ 2 หากด้านบน

เรียกใช้การทำงานอัตโนมัติสำหรับ Windows Search for service โดยใช้ชื่อและลบผลลัพธ์


0

สาเหตุหลักของข้อผิดพลาดคือกระบวนการไม่หยุดทำงาน เพื่อแก้ปัญหาให้เริ่มตัวจัดการงานไปที่บริการและดูว่าคุณยังสามารถดูบริการของคุณได้มากกว่าไปที่กระบวนการบริการและกระบวนการสิ้นสุด กว่าปัญหาจะได้รับการแก้ไขอย่างสมบูรณ์


0

ฉันมีปัญหานี้เมื่อฉันใช้ Application Verifier เพื่อตรวจสอบบริการที่ชนะของฉัน แม้หลังจากที่ฉันปิด App Ver บริการของฉันถูกบล็อกจากการลบ เฉพาะการลบบริการออกจาก App Ver แก้ไขปัญหาและบริการถูกลบทันที ดูเหมือนว่าบางกระบวนการยังคงใช้บริการของคุณหลังจากที่คุณพยายามลบ


0

ขั้นตอนในการปฏิบัติตาม:

ขั้นตอนที่ 1 ได้รับตำแหน่ง C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

คำสั่งเรียกใช้ขั้นตอนที่ 2 : installutil / u full-path / servicename.exe

ขั้นตอนที่ 3ปิดแผงบริการแล้วเปิดใหม่

คำสั่งเรียกใช้ขั้นตอนที่ 4 : installutil full-path / servicename.exe


1
หมายเหตุด้าน: installutil ทำงานได้เฉพาะในฐานะผู้ดูแลระบบดังนั้นให้เปิดเชลล์ในฐานะผู้ดูแลระบบ
ingconti

0

บริการลบส่วนใหญ่อาจล้มเหลวเพราะ

protected override void OnStop()

เกิดข้อผิดพลาดขณะหยุดให้บริการ การห่อสิ่งต่าง ๆ ภายในลองจับจะช่วยป้องกันข้อผิดพลาดการทำเครื่องหมาย

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

}


0

บางครั้งสิ่งนี้อาจเกิดขึ้นระหว่างการลบบริการผ่านสคริปต์เซสชันระยะไกล PowerShell โดยเฉพาะอย่างยิ่งเมื่อคุณพยายามลบบริการหลายครั้ง ในกรณีนี้ลองสร้างเซสชันใหม่อีกครั้งก่อนที่จะลบ:

Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name  -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.