Hoe op te lossen De opgegeven service is gemarkeerd voor verwijdering fout

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:

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’.

  1. De procesverkenner van SysInternals is geopend. Het sluiten ervan zou moeten leiden tot automatische verwijdering van de service.

  2. Taakbeheer is geopend.

  3. Microsoft Management Console (MMC) is geopend. Om ervoor te zorgen dat alle instanties zijn gesloten, voert u taskkill /F /IM mmc.exe uit.

  4. Services-console is geopend. Dit is hetzelfde als het vorige punt, aangezien de Services-console wordt gehost door MMC.

  5. Event Viewer is geopend. Nogmaals, dit is hetzelfde als het derde punt.

  6. De sleutel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{service name} bestaat.

  7. Iemand anders is ingelogd op de server en heeft een van de eerder genoemde applicaties geopend.

  8. 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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes