Hvorfor kan jeg omdøbe en Windows Service-eksekverbar, mens den kører?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Windows-tjeneste skrevet på et administreret sprog (.NET Framework v4.0), der aktuelt kører.


Af en eller anden grund kan jeg omdøbe tjenesteydelsens hovedkørsel, mens tjenesten kører.
Jeg vil mistanke om, at filen låses af Windows, mens tjenesten kører, men det ser ikke ud til at være tilfældet.
Mere interessant er det stadig til stede i task manager efter omdøbning.


Jeg klager ikke over, at dette er muligt, men jeg undrer mig over hvorfor. Enhver har en forklaring på dette?

Bedste reference


Modtaget fra dette svar på superbrugeren,
og hvordan kan vi overskrive EXE-filer, mens brugerne kører dem?, [1]


Eksekverbare filer, der ikke udelukkende er låst, kan omdøbes. Windows-serviceadministratoren får et filhåndtag på den eksekverbare tjeneste, som det holder åbent, så længe tjenesten løber, og er helt upåvirket af et omdøb. Det låser ikke selve telefonbogsposten. Så den eksekverbare kan læses af andre processer, og filnavnet på filen kan omdøbes.


Konsekvenser:



  • Efter omdøbet kan en anden version af filen placeres.

  • Hvis du eller en automatiseret opdateringsproces undlader at placere den nye version, vil enhver tjeneste, der peger på den eksekverbare, ikke starte næste gang (ved genstart/genstart)

  • Hvis den nye version har problemer, som fejl eller manglende afhængigheder, kan tjenesten muligvis ikke starte næste gang (ved genstart/genstart)

  • Når du placerer den nye version, men ikke genstarter tjenesten straks, bliver den aktiv til enhver tid i fremtiden, som ikke er noget administratorer (og brugere) som i et produktionsmiljø.



anbefalinger:



  • Stol ikke på denne mekanisme. Få din opdateringsproces til at stoppe tjenesten. Fejl ikke opdateringen, når din opdateringsproces har utilstrækkelige tilladelser til at gøre det. Udskift derefter den eksekverbare og alle afhængigheder, og genstart tjenesten.