Windows Service startede, men processen blev forsvundet i task manager

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg programmerede en Windows Service, og den kører på en Windows 2000-maskine. Nogle gange dør den eksekverbare til denne tjeneste, men Windows-tjenesten er stadig angivet som 'startet' i serviceadministratoren. I denne situation træder den genstartede adfærd, der er defineret for denne tjeneste, ikke i kraft.


Selvfølgelig skal processen fjernes, men jeg søger lige nu for en løsning.


Hvordan kan jeg undgå denne situation? Hvordan afgør servicechefen i Windows 2000, om en Windows 2000-proces stadig er startet eller ej?

Bedste reference


Det betyder nok, at tjenesten styrtede. IIRC, ældre versioner af Windows blev ikke altid genoprettet, når en serviceproces abnormalt afslutter. Men det var for mange år siden, og min hukommelse kan være defekt.


Den bedste måde at undgå situationen på er at finde ud af, hvad der forårsager din tjeneste at kollidere og rette op på.

Andre referencer 1


Selv om Larry, som er Microsoft-medarbejder, sikkert ved bedre end nogen anden, tør jeg sige, at du skal give ChangeServiceConfig2 med SERVICE\_CONFIG\_FAILURE\_ACTIONS et skud. Jeg har arbejdet på en arv tjeneste, der før jeg gjorde refactoring, plejede at kollidere meget. Den løsning, som mine forgængere valgte, var at bruge fejlhandlingen for at påberåbe et program, der (kører under SYSTEM) ville genstarte tjenesten som om der ikke var sket noget.


Alt dette virker kun, hvis din tjeneste kører i sin egen proces, som jeg antog, da du beskriver det. Hvis din tjeneste implementeres i en DLL, vil dette ikke arbejde.


Men jeg er helt enig med Larry om, at du bør undersøge og løse problemet, snarere end at forsøge at skjule det. Som nævnt ovenfor fik jeg den pågældende tjeneste rettet, og den kolliderer ikke eller kører meget sjældent og alle er lykkeligere med den løsning;)