Outre le service.StartType = ServiceStartMode.Automatic mon service ne démarre pas après l'installation
Solution
Inséré ce code sur mon ProjectInstaller
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
base.OnAfterInstall(savedState);
using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName))
serviceController.Start();
}
Merci à ScottTx et Francis B.
.net
windows-services
installer
Jader Dias
la source
la source
Réponses:
Vous pouvez tout faire à partir de votre exécutable de service en réponse aux événements déclenchés par le processus InstallUtil. Remplacez l'événement OnAfterInstall pour utiliser une classe ServiceController pour démarrer le service.
http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller.aspx
la source
J'ai publié une procédure étape par étape pour créer un service Windows en C # ici . On dirait que vous êtes au moins à ce point, et maintenant vous vous demandez comment démarrer le service une fois qu'il est installé. Si vous définissez la propriété StartType sur Automatique, le service démarrera automatiquement après le redémarrage de votre système, mais il ne démarrera pas automatiquement (comme vous l'avez découvert) votre service après l'installation.
Je ne me souviens pas où je l'ai trouvé à l'origine (peut-être Marc Gravell?), Mais j'ai trouvé une solution en ligne qui vous permet d'installer et de démarrer votre service en exécutant réellement votre service lui-même. Voici l'étape par étape:
Structurez la
Main()
fonction de votre service comme ceci:Voici le code de support:
Continuer avec le code de support ...
À ce stade, après avoir installé votre service sur la machine cible, exécutez simplement votre service à partir de la ligne de commande (comme toute application ordinaire) avec l'
-install
argument de ligne de commande pour installer et démarrer votre service.Je pense que j'ai tout couvert, mais si vous trouvez que cela ne fonctionne pas, veuillez me le faire savoir afin que je puisse mettre à jour la réponse.
la source
YourServiceType
est le queProjectInstaller
vous avez ajouté au service qui contientServiceInstaller
etServiceProcessInstaller
Visual Studio
Si vous créez un projet d'installation avec VS, vous pouvez créer une action personnalisée qui a appelé une méthode .NET pour démarrer le service. Cependant, il n'est pas vraiment recommandé d'utiliser une action personnalisée gérée dans un MSI. Consultez cette page .
InstallShield ou Wise
Si vous utilisez InstallShield ou Wise, ces applications offrent la possibilité de démarrer le service. Par exemple, avec Wise, vous devez ajouter une action de contrôle de service. Dans cette action, vous spécifiez si vous souhaitez démarrer ou arrêter le service.
Wix
En utilisant Wix, vous devez ajouter le code XML suivant sous le composant de votre service. Pour plus d'informations à ce sujet, vous pouvez consulter cette page .
la source
Vous devez ajouter une action personnalisée à la fin de la séquence «ExecuteImmediate» dans le MSI, en utilisant le nom du composant de l'EXE ou un lot (sc start) comme source. Je ne pense pas que cela puisse être fait avec Visual Studio, vous devrez peut-être utiliser un véritable outil de création MSI pour cela.
la source
Pour le démarrer juste après l'installation, je génère un fichier batch avec installutil suivi de sc start
Ce n'est pas idéal, mais ça marche ...
la source
Utilisez la classe .NET ServiceController pour le démarrer ou exécutez la commande de ligne de commande pour le démarrer --- "net start servicename". De toute façon fonctionne.
la source
Pour ajouter à la réponse de ScottTx, voici le code réel pour démarrer le service si vous le faites à la manière de Microsoft (c'est-à-dire en utilisant un projet d'installation, etc.)
(excusez le code VB.net, mais c'est ce avec quoi je suis coincé)
Pour créer le gestionnaire d'événements ci-dessus, accédez au concepteur ProjectInstaller où se trouvent les 2 contrôleurs. Cliquez sur le contrôle ServiceInstaller1. Accédez à la fenêtre des propriétés sous événements et vous y trouverez l'événement AfterInstall.
Remarque: ne placez pas le code ci-dessus sous l'événement AfterInstall pour ServiceProcessInstaller1. Cela ne fonctionnera pas, venant de l'expérience. :)
la source
La solution la plus simple se trouve ici install-windows-service-without-installutil-exe par @ Hoàng Long
la source