Προσπαθώ να καταργήσω μια υπηρεσία των Windows με την εντολή sc delete <service name>
και αντιμετωπίζω το ακόλουθο σφάλμα:
[SC] DeleteService FAILED 1072: >, Η συγκεκριμένη υπηρεσία έχει επισημανθεί για διαγραφή.
Τι έχω ήδη κάνει:
Τι έχω ήδη κάνει: Σταμάτησα την υπηρεσία, προφανώς. Το sc queryex "<όνομα υπηρεσίας>"
δίνει το ακόλουθο αποτέλεσμα:
SERVICE_NAME: Stub service
TYPE : 10 WIN32_OWN_PROCESS
ΚΑΤΆΣΤΑΣΗ : 1 ΣΤΑΜΑΤΗΜΈΝΗ
WIN32_EXIT_CODE : 1067 (0x42b)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 0
FLAGS :
Διασφαλίστηκε ότι η Microsoft Management Console έχει κλείσει (taskkill /F /IM mmc.exe
),
Αφαίρεσε το κλειδί HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
Λόγω αυτής της αφαίρεσης, το services.msc
εξακολουθεί να εμφανίζει την υπηρεσία (με όνομα, αλλά χωρίς κατάσταση ή τύπο εκκίνησης), αλλά η περιγραφή είναι "<Failed to Read Description. Κωδικός σφάλματος: 2 >". Κατά την προσπάθεια προβολής των ιδιοτήτων, εμφανίζεται πέντε φορές η ένδειξη "Το σύστημα δεν μπορεί να βρει το αρχείο που καθορίζεται.".
Το πρόβλημα παραμένει.
Ποιο είναι το επόμενο βήμα;
Μπορεί να υπάρχουν διάφορες αιτίες που οδηγούν στο ότι η υπηρεσία έχει κολλήσει στην κατάσταση "mark for deletion".
SysInternals' Η Εξερεύνηση διεργασιών έχει ανοίξει. Το κλείσιμό του θα πρέπει να οδηγήσει σε αυτόματη διαγραφή της υπηρεσίας.
Ανοίγει η κονσόλα διαχείρισης της Microsoft (MMC). Για να βεβαιωθείτε ότι όλες οι περιπτώσεις έχουν κλείσει, εκτελέστε την εντολή taskkill /F /IM mmc.exe
.
Ανοίγει η κονσόλα υπηρεσιών. Αυτό είναι το ίδιο με το προηγούμενο σημείο, καθώς η κονσόλα Services φιλοξενείται από το MMC.
Η προβολή συμβάντων ανοίγει. Και πάλι, αυτό είναι το ίδιο με το τρίτο σημείο.
Το κλειδί HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{όνομα υπηρεσίας} υπάρχει.
Κάποιος άλλος έχει συνδεθεί στο διακομιστή και έχει ανοίξει μία από τις προαναφερθείσες εφαρμογές.
Μια περίπτωση του Visual Studio που χρησιμοποιείται για την αποσφαλμάτωση της υπηρεσίας είναι ανοιχτή.
Στην περίπτωσή μου, προκλήθηκε από μη επεξεργασμένη εξαίρεση κατά τη δημιουργία της πηγής eventLog. Χρησιμοποιήστε try catch για να εντοπίσετε την αιτία.