Annullering af en Windows-serviceinstallation/Afinstallation med Windows Installer forårsager, at tjenesten installeres/afinstalleres ufuldstændigt

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har oprettet en Windows Installer til en Windows-tjeneste med VS 2017. Windows-tjenesten har en projektinstallatør og serviceinstallatørklasse inde i den. Når jeg afbryder afinstallationsprocessen midtvejs, fjerner processen Windows-tjenesten, men opdaterer ikke data, så næste gang jeg kører installationsprogrammet, får jeg mulighed for at reparere eller afinstallere Windows-tjenesten. Forsøg på at afinstallere Windows-tjenesten giver nu en fejl, at 'den angivne tjeneste ikke eksisterer', og derfor afinstalleres processen. Nu er systemet i en tilstand, hvor tjenesten ikke kan installeres eller afinstalleres. For at kunne fjerne tjenesten helt, skal den installeres igen fra kommandolinjen, så den kan afinstalleres ordentligt. Er der en vej rundt om dette problem? Jeg tænkte på at bruge tjenesten installeringsbord for at sikre, at tjenesten er fjernet korrekt, selv ved annullering, men så får jeg fejlen, at tjenesten allerede er installeret, når jeg prøver at installere tjenesten [[Projektinstaller/Service Installer klasser gør denne installation, Jeg tror]]

Bedste reference


Først skal du sørge for at du har lavet alle brugerdefinerede handlingstjenestens installationsnoder, især hvis du har udfyldt brugerdefinerede handlinger. Disse tilpassede handlinger fungerer sammen, så hvis du har gået glip af en af ​​dem, der kan forårsage problemet. teori, der afbryder afinstallationen skulle have bemærket, at tjenesten ikke længere er installeret, og den skal installeres igen.


Hvis det ikke er problemet, så er det nok en fejl. Den mest nyttige ting, du kan gøre for at rette det, er at tilsidesætte base.Uninstall () i installationsprogrammet og tilføje nogle kode for at kontrollere, at tjenesten er installeret, før du ringer til base.Uninstall ().


Visual Studio-installationsprojekter er de eneste, der bruger kode til at installere tjenester, og de er brugerdefinerede handlinger til at kalde installatørklassemetoder. Alle andre bruger de ServiceInstall- og ServiceControl-tabeller, der leveres af Windows Installer.


Nogle af de muligheder, du kan bruge, hvis du ikke vil helt skifte til et andet værktøj som WiX, er:



  1. ServiceControl og ServiceInstall tabellerne er ikke for komplicerede, hvis du ved noget om tjenester. Hvis du ruller ned herfra til afsnit om Visual Studio og installerer tjenester, er der en artikel og et program til at hjælpe med det:



http://www.installsite.org/pages/en/msi/tips.htm[1]



  1. Du kan dykke ind i WiX nok til at oprette et fusionsmodul, der vil installere tjenesterne, sammen med eventuelle start/stop-handlinger, der kræves. Derefter flettes fusionsmodulet i dit Visual Studio setup. Ingen brugerdefinerede handlinger er påkrævet (og installer klasser er brugerdefinerede handlinger, så du behøver dem).


Andre referencer 1


MSVS Installers & Brugerdefinerede handlinger : Du bruger Microsoft Visual Studio 2017 Installer Projekter ? De er meget begrænsede . Brug af brugerdefinerede handlinger til serviceinstallation er et symptom på dette. Brugen af ​​brugerdefinerede handlinger generelt er en meget fejltagende tilgang (kan være en over den øverste opskrivning), og til serviceinstallation er det næsten aldrig den rigtige tilgang. Slip af brugerdefinerede handlinger, når du kan, og din installationsfejlfrekvens vil falde. [2]


Indbyggede serviceinstallationsfunktioner : Du skal bruge de indbyggede serviceinstallationsfunktioner i Windows Installer (ServiceInstall og ServiceControl tabeller - som du synes bekendt med), og der er et antal værktøjer, der kan hjælpe dig med at gøre dette. Her er nogle alternative værktøjer (gratis og kommercielt), som du kan bruge . WiX gør jobbet pænt, men har en læringskurve. [4] [5]





Servicestat : Jeg ville genstarte i dit tilfælde for at slippe af med tjenestenes nuværende fejltilstand. Det kan være i nogle mærkelige tilstand, der venter sletning, der kan forårsage rar test resultater. Jeg tager aldrig tid til at undersøge sådanne problemer korrekt, men i stedet foretrækker at forsøge at fjerne dem ved en simpel genstart for at slippe af med fejltilstanden. Derefter skal implementeringsretten med indbyggede funktioner og fejlstanden aldrig forekomme. Et problem fjernet er ti problemer løst? (Ønskeseddel :-)).






  • Visual Studio Publiceringsprojekt i One Simple Installer

  • Hvilken installationsprodukt skal du bruge? InstallShield, WiX, Wise, Advanced Installer, osv.