Implementatie: hoe krijg ik toegang tot een Windows-servicenaam zodat het (de) installatieprogramma het kan de-installeren?

Bij de installatie van een Windows-service gebruikt een toepassing een aangepaste actie om de ServiceName en DisplayName van die service in te stellen op basis van de gebruiker die een dialoogvenster voor de installatiedialoog invoert.

Bij het testen van deze applicatie werkt het prima voor de installatie, maar als ik probeer de service te verwijderen, krijg ik een fout 1001. Service bestaat niet.

enter image description here

wat uiteindelijk niet waar is omdat ik het kan uitvoeren. Dus mijn huidige mening is dat ik op de een of andere manier toegang moet krijgen tot de aangepaste naam van de dienst en die naar het verwijderprogramma moet doorsturen. Ik had gedacht dat dit allemaal gebaseerd was op GUID en dat de naam grotendeels irrelevant zou worden: verwijderen, maar het lijkt niet het geval te zijn.

Dus hoe moet ik dit probleem oplossen?

1

1 antwoord

Ik ga ervan uit dat u een Installer afgeleide klasse samen met een ServiceInstaller exemplaar.

Ik doe iets soortgelijks in een project. De servicenaam wordt opgeslagen in een tekstbestand (dit is slechts een optie, maar voor mij is het er voor automatische inzetdoeleinden). U kunt het overal opslaan (register, enz.).

U moet daarom de aangepaste servicenaam die tijdens de installatiefase is geconfigureerd, ergens voortzetten.

Dus, ik heb mijn Installer -klasse:

[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer

En in zijn constructor, ik doe:

_process = new ServiceProcessInstaller { Account = ServiceAccount.LocalSystem };
_service = new ServiceInstaller { ServiceName = ServiceNameReader.GetServiceName(), StartType = ServiceStartMode.Automatic };
Installers.Add(_process);
Installers.Add(_service);

Let op de functie ServiceNameReader.GetServiceName() . Deze aangepaste functie haalt de servicenaam uit het bestand. De klasse Installer wordt ook geïnstantieerd en opgeroepen tijdens het verwijderen. Dus als u zoiets doet, om de daadwerkelijke servicenaam dynamisch ergens te laden, kunt u deze met succes verwijderen.

2
toegevoegd