c # - Fejl 1001: Den angivne service eksisterer allerede. Kan ikke fjerne eksisterende tjeneste

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en service. Jeg installerede det for et stykke tid siden. Jeg skal gøre en opdatering til tjenesten. Jeg gik til Add/Remove Programs og søgte efter min service, og den er ikke installeret der. Jeg kiggede på services.msc og det er der, stoppet. Jeg kunne starte det og stoppe det. Jeg kørte en kommandoprompt som administrator og kørte sc slette [[Service Name]] og modtaget 'Den angivne tjeneste findes ikke som en installeret tjeneste.' Jeg gjorde en sc-forespørgsel i kommandoprompten, og den returneres ikke. Jeg har højreklikket på installationsprogrammet, klikket på afinstallere og modtaget 'Denne handling gælder kun for produkter, der er installeret.' Jeg prøvede også at reparere og fik den samme besked.


Jeg har genstartet maskinen et par gange, og ikke held på at få denne service til at afinstallere. Jeg bruger den grundlæggende installationsprojektskabelon installeret med Visual Studio. Jeg har forsøgt at ændre programmets navn og øge versionsnummeret.


Hvordan afinstallerer jeg den service, der tilsyneladende eksisterer, og forhindrer det i fremtiden?

Bedste reference


Hvis du har .exe, der indeholder serviceinstallationsprogrammet, skal du bruge InstallUtil.exe /u <process.exe>
InstallUtil.exe findes i WindowsMicrosoft.NetFrameworkv4.0.30319


I installationsprojektet skal du inkludere din tjeneste i alle brugerdefinerede handlinger, også afinstallationen


(højreklik på projektet, brugerdefineret handling)


HTH


Mario

Andre referencer 1


** Hvis det kun skal ske via opsætningen, skal du følge:


Dette kan håndteres ved eksplicit implementering af eksisterende fjernelse af tjenester (afinstallation) og derefter tillader nyere version at installere.
Til dette skal vi opdatere ProjectInstaller.Designer.cs som nedenfor:


Overvej at tilføje følgende linje i begyndelsen af ​​InitializeComponent (), der udløser en begivenhed for at afinstallere den eksisterende tjeneste, før din nuværende installatør forsøger at installere tjenesten igen. Her afinstalleres tjenesten, hvis den allerede eksisterer.


Tilføj følgende navneområder:


using System.Collections.Generic;
using System.ServiceProcess;


Tilføj nedenstående kodekode som beskrevet tidligere:


this.BeforeInstall += new
System.Configuration.Install.InstallEventHandler(ProjectInstaller\_BeforeInstall);


Eksempel:


private void InitializeComponent()
{
    this.BeforeInstall += new System.Configuration.Install.InstallEventHandler(ProjectInstaller\_BeforeInstall);

    this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
    this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
    // 
    // serviceProcessInstaller1
    // 
    this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
    this.serviceProcessInstaller1.Password = null;
    this.serviceProcessInstaller1.Username = null;
    // 
    // serviceInstaller1
    // 
    this.serviceInstaller1.Description = "This is my service name description";
    this.serviceInstaller1.ServiceName = "MyServiceName";
    this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
    // 
    // ProjectInstaller
    // 
    this.Installers.AddRange(new System.Configuration.Install.Installer[]{
            this.serviceProcessInstaller1,
            this.serviceInstaller1
        }
    );
}


Koden nedenfor kaldes af begivenheden vil derefter afinstallere tjenesten, hvis den eksisterer.


void ProjectInstaller\_BeforeInstall(object sender, System.Configuration.Install.InstallEventArgs e)
{
    List<ServiceController> services = new List<ServiceController>(ServiceController.GetServices());

    foreach (ServiceController s in services)
    {
        if (s.ServiceName == this.serviceInstaller1.ServiceName)
        {
            ServiceInstaller ServiceInstallerObj = new ServiceInstaller();
            ServiceInstallerObj.Context = new System.Configuration.Install.InstallContext();
            ServiceInstallerObj.Context = Context;
            ServiceInstallerObj.ServiceName = "MyServiceName";
            ServiceInstallerObj.Uninstall(null);

            break;
        }
    }
}


PS: Sammen med ovenstående ændringer, skal du også overveje at opdatere installationsversionen, ProductCode (og optionall UpgradeCode) til god praksis, bedre versionstyring, sporing og vedligeholdelse

Andre referencer 2


Det er helt normalt, at tjenesten ikke er angivet i Tilføj/fjern programmer, den notering er til softwarepakker og ikke tjenester. (En pakke eller et program kan indeholde flere tjenester, men det installerer normalt ingen.)


Tilsyneladende blev tjenesten installeret manuelt, ikke som en del af produktet, selvom denne især ville installere med et produkt, hvis installationspakke du har.


Brug af sc delete er korrekt. Du skal medtage (kort) navnet på tjenesten i dobbelt citater (medmindre det kun er et enkelt ord), men intet andet.


Hvis du undlader det, skal du besøge HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetServices i dit register, henholdsvis 32 bit og 64 bit (regedt32.exe og regedit.exe. Du kan endda slette tjenesten der direkte, men du bør selvfølgelig starte med reversible ændringer for at diagnosticere, hvordan din tjeneste nøjagtigt hedder og hvorfor sc ikke kan se navnet og kun bruge direkte adgang til registreringsdatabasen, efter at alt andet har fejlet og efter du har sikkerhedskopieret dit register (google denne procedure op med at angive dit operativsystem).

Andre referencer 3


Samme sket med mig i dag. Den eneste løsning var at reparere installationsfilen fra Windows Tilføj/fjern værktøj. Efter reparation af din installationsfil skal du afinstallere og installere den igen.

Andre referencer 4


Har du forsøgt at kigge i Windows-registreringsdatabasen for noget skrald i forbindelse med den pågældende tjeneste ?.


Du skal se på denne mappe: HKEY\_LOCAL\_MACHINE \ SYSTEM \ CurrentControlSet \ Services \

Andre referencer 5


Bare hvis nogen andre kommer på tværs af dette problem:


Hvad der fungerede for mig, var at opdatere navn, version og produktkode af min installatør. Skal helt sikkert følge god praksis med versionering alligevel.