Ik probeer een Windows-service te verwijderen met sc delete <service name>
en krijg de volgende foutmelding:
[SC] Verwijderservice MISLUKT 1072:
De opgegeven service is gemarkeerd voor verwijdering.
Wat ik al heb gedaan:
-
De service is natuurlijk gestopt. De
sc queryex "<service name>"
geeft het volgende resultaat:SERVICE_NAME: Stub service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1067 (0x42b) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 0 FLAGS :
-
Ervoor gezorgd dat de Microsoft Management Console is gesloten (
taskkill /F /IM mmc.exe
), -
Als gevolg van deze verwijdering toont
Services.msc
nog steeds de service (met een naam, maar geen status of opstarttype), maar de beschrijving is <Kan beschrijving niet lezen. Foutcode: 2 > . Bij een poging om de eigenschappen te bekijken, wordt Het systeem kan het opgegeven bestand niet vinden vijf keer weergegeven.
Het probleem blijft bestaan.
Wat is de volgende stap?
Antwoord 1, autoriteit 100%
Er kunnen verschillende oorzaken zijn die ertoe leiden dat de service vastloopt in ‘gemarkeerd voor verwijdering’.
-
De procesverkenner van SysInternals is geopend. Het sluiten ervan zou moeten leiden tot automatische verwijdering van de service.
-
Microsoft Management Console (MMC) is geopend. Om ervoor te zorgen dat alle instanties zijn gesloten, voert u
taskkill /F /IM mmc.exe
uit. -
Services-console is geopend. Dit is hetzelfde als het vorige punt, aangezien de Services-console wordt gehost door MMC.
-
Event Viewer is geopend. Nogmaals, dit is hetzelfde als het derde punt.
-
De sleutel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{service name} bestaat.
-
Iemand anders is ingelogd op de server en heeft een van de eerder genoemde applicaties geopend.
-
Een instantie van Visual Studio gebruikt om fouten op te sporen in de service is geopend.
Antwoord 2, autoriteit 19%
Dit kan ook worden veroorzaakt door de Services-console open te laten staan. Windows zal de service pas verwijderen als deze is afgesloten.
Antwoord 3, autoriteit 4%
Ik had hetzelfde probleem, uiteindelijk besluit ik het serviceproces te beëindigen.
probeer hiervoor onderstaande stappen:
-
proces-ID van service ophalen met
sc queryex <service name>
-
proces doden met
taskkill /F /PID <Service PID>
Antwoord 4, autoriteit 4%
In mijn geval werkte het na het sluiten van de Services
. Controleer of de Services.msc
open is, zo ja, sluit deze en controleer of een serviceproces is gevonden in Task Manager
.
Antwoord 5
Dat betekent dat de service nog steeds wordt vermeld als uitgeschakeld in services.msc.
Sluit gewoon de services.msc en open het opnieuw als beheerder…
De dienst wordt niet vermeld. Installeer nu de service met het commando,
installutil “path of service”
Antwoord 6
Door de servicesconsole te sluiten, zoals gesuggereerd door enkele van de antwoorden hier, kon ik de service verwijderen. In mijn scenario was dit slechts een kortetermijnoplossing, omdat ik voor alle volgende herinstallaties en verwijdering van de service deze aanvullende stappen moest nemen. Bij het bekijken van mijn web.config-bestand werd ontdekt dat er een fout was die, eenmaal opgelost, me in staat stelde de service gemakkelijk te verwijderen zonder de stap van de servicesconsole extra te sluiten.
Antwoord 7
Het verwijderen van registersleutels zoals hierboven gesuggereerd, zorgde ervoor dat mijn service vastliep in de stopstatus. De volgende procedure werkte voor mij:
open taakbeheer > selecteer het tabblad diensten > selecteer de dienst > klik met de rechtermuisknop en selecteer “ga naar proces” > klik met de rechtermuisknop op het proces en selecteer Proces beëindigen
De service zou daarna weg moeten zijn
Antwoord 8
Nog één ding ontdekt om te controleren – kijk in Taakbeheer – als andere gebruikers zijn verbonden met dit vak, zelfs als ze ‘losgekoppeld’ zijn, moet je ze daadwerkelijk uitloggen om de service definitief te verwijderen.
Antwoord 9
Het lijkt erop dat op latere Windows-versies dan Windows 7 (niet geverifieerd, maar de laatste ervaring met Windows Server 2012 R2), de Service Control Manager (SCM) strenger is.
Terwijl het in Windows 7 gewoon een ander proces voortbrengt, controleert het nu of het serviceproces nog steeds in de buurt is en kan het ERROR_SERVICE_MARKED_FOR_DELETE (1072) retourneren voor elke volgende aanroep naar CreateService/DeleteService, zelfs als de service lijkt te zijn gestopt.
p>
Ik heb het hier over Windows API-code, maar ik wil duidelijk aangeven wat er gebeurt, dus deze volgorde kan leiden tot de genoemde fout:
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
De reden waarom een serviceproces nog steeds bestaat nadat het zijn SERVICE_STOPPED-status al heeft gemeld, is niet verrassend. Het is een regulier proces, waarvan de hoofdthread is ‘vastgelopen’ in zijn aanroep naar de StartServiceCtrlDispatcher
API, dus het reageert eerst op een stopcontrole-actie, maar moet dan de resterende codereeks uitvoeren.
Het is een beetje jammer dat het SCM/OS dit niet goed voor ons afhandelt.
Een programmatische oplossing is nogal eenvoudig en nauwkeurig: verkrijg de proceshandle van het uitvoerbare bestand voordat u de service stopt en wacht tot deze handgreep wordt gesignaleerd.
Als je het probleem vanuit het oogpunt van systeembeheer benadert, is de oplossing ook om te wachten tot het serviceproces volledig is verdwenen.
Antwoord 10
Dit is wat voor mij werkte:
– Ik stuitte op hetzelfde probleem: mijn service zat vast in ‘gemarkeerd voor verwijdering’.
– Ik opende services.msc
Mijn service werd wel weergegeven als actief, hoewel deze al was verwijderd.
– Ik klikte op Stop
Er is een foutbericht ontvangen dat de service niet in staat is om controleberichten te ontvangen.
Toch werd de dienst stopgezet.
– Gesloten services.msc.
– Services.msc heropend.
– De service was verdwenen (niet meer weergegeven in de lijst met services).
(De omgeving was Windows 7.)
Antwoord 11
Het sluiten van elk venster dat op dat moment open was, gevolgd door het uitvoeren van de volgende opdracht, loste het probleem voor mij op:
taskkill /F /IM mmc.exe
Antwoord 12
In mijn geval voer ik taskkill /f /im dongleserver.exe
uit,
waarbij dongleserver.exe
het exe-bestand van mijn programma is.
Dan kan ik mijn programma al opnieuw installeren.
Antwoord 13
In mijn geval werd het veroorzaakt door een onverwerkte uitzondering tijdens het maken van de eventLog-bron. Gebruik try catch om de oorzaak te achterhalen.
Antwoord 14
Dit werkt voor mij.
- Open Taakbeheer
- Tabblad Services selecteren
- Selecteer de service met het probleem
- Klik met de rechtermuisknop en selecteer “Ga naar details”
- Klik met de rechtermuisknop op de service en selecteer “Processtructuur beëindigen”
Procesboom beëindigen beëindigt het proces en alle processen die door het proces zijn gemaakt.
Vervolgens kunt u de service opnieuw installeren.
Antwoord 15
In mijn geval was de servicenaam ‘Monitor’ die ook wordt gebruikt door een Windows-service genaamd ‘Monitor’, toen ik probeerde mijn services bij te werken, probeerde ik ze te verwijderen, het installatieprogramma probeerde de Windows-service ‘Monitor’ te verwijderen ‘ wat het niet kon, en de installatie werd altijd teruggedraaid.
Ik heb mijn service uiteindelijk hernoemd naar iets anders
Antwoord 16
De belangrijkste reden voor de fout is dat het proces niet wordt gestopt.
om het op te lossen, start taakbeheer, ga naar services en kijk of je je service nog steeds kunt zien, ga dan naar het proces van die service en beëindig het proces. Dan is het probleem volledig opgelost.
Antwoord 17
Als de stappen van @MainMa niet werken, volg dan de volgende stappen
Stap 1 Probeer het proces te beëindigen vanuit Windows Taakbeheer of gebruik taskkill /F /PID . Je kunt de pid van het proces vinden met het commando ‘sc queryex’. Probeer de volgende stap als u de installatie nog steeds niet kunt verwijderen.
Stap 2 Indien hierboven
Voer Autoruns voor Windows uit Zoek naar service op naam en verwijder resultaten .
Antwoord 18
Ik had dit probleem toen ik Application Verifier gebruikte om mijn win-service te verifiëren. Zelfs nadat ik App Ver had gesloten, kon mijn service niet worden verwijderd. Alleen het verwijderen van de service uit App Ver loste het probleem op en de service werd meteen verwijderd. Het lijkt erop dat een proces je service nog steeds gebruikt nadat je geprobeerd hebt er een te verwijderen.
Antwoord 19
te volgen stappen:
stap-1 ga naar de locatie C:\Windows\Microsoft.NET\Framework\v4.0.30319
stap-2 voer het commando uit: installutil /u full-path/servicename.exe
stap-3 sluit het dienstenpaneel en open het opnieuw
stap-4 voer het commando uit: installutil full-path/servicename.exe
Antwoord 20
Hoogstwaarschijnlijk mislukt het verwijderen van de service omdat
protected override void OnStop()
throw-fout bij het stoppen van een service. door dingen in een try-catch te wikkelen, wordt markering voor verwijderingsfout voorkomen
protected override void OnStop()
{
try
{
//things to do
}
catch (Exception)
{
}
}
Antwoord 21
Soms kan dit gebeuren tijdens het verwijderen van een service via het externe PowerShell-sessiescript, vooral wanneer u de service meerdere keren probeert te verwijderen. Probeer in dit geval een sessie opnieuw te maken voordat u deze verwijdert:
Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession