2011-10-27 7 views
1

possible en double:
How to automatically start your service after install?Démarrage automatique d'un service lorsque le programme d'installation se termine

J'ai un Visual Studio 2008 C# projet d'installation de service .NET 3.5 (MSI) fonctionnant sous Windows 7 x64 .

Je m'inscris à la notification ServiceInstaller.OnAfterInstall pour démarrer mon service à la fin de l'installation. Bien que la fonction réussisse sans exception, mon service ne fonctionne jamais à la fin du programme d'installation.

Le journal des événements ne montre aucune défaillance liée au démarrage du service et si je me rends au gestionnaire de services, je peux démarrer le service manuellement (ou redémarrer le PC et il démarrera automatiquement).

Que dois-je faire pour démarrer automatiquement mon service une fois le processus d'installation terminé?

+0

Il semble que ce que vous avez fait devrait fonctionner. Astuce possible pour déboguer ceci: Essayez d'insérer un 'Thread.Sleep' avec une valeur de 30 secondes ou plus.Cela peut vous permettre d'attacher un débogueur au processus de service, et vous pouvez définir un point d'arrêt juste après le 'Thread.Sleep'. Une fois que vous êtes en pause dans le débogueur, si vous obtenez toujours des erreurs lors de la reprise, ce n'est pas une question de timing. À ce stade, vous pouvez interroger votre état de service à votre guise et déterminer ce qui cause le problème. Si le 'thread.Sleep' le fait commencer à travailler, il est bien sûr une chose de synchronisation ... –

+0

Vous pouvez également ajouter" System.Diagnostics.Debugger.Launch(); " au début de votre méthode de démarrage pour forcer le débogueur à être attaché, afin que vous puissiez vérifier ce qui ne va pas. Il est possible qu'il y ait une exception quelque part et que votre service s'arrête automatiquement. – user276648

Répondre

0

Je suppose que Démarrer retourne immédiatement et Démarre le service en arrière-plan. Vérifiez les Docs: http://msdn.microsoft.com/en-us/library/yb9w7ytd.aspx

+0

Oui, j'en suis sûr. Cela n'explique pas pourquoi le service n'est pas démarré ou comment le démarrer correctement. – PaulH

+0

Avez-vous essayé d'attendre jusqu'à ce qu'il soit démarré? Il y a un exemple dans le lien que j'ai posté – Andreas

+0

Waiting n'a pas résolu le problème - le programme d'installation s'est accroché sur cette attente. Le service tentera de démarrer et d'échouer. J'avais 'base.Install (savedState);' en haut de mon override 'Installer.Install'. Ainsi, le programme d'installation tentait de démarrer le service avant d'avoir terminé l'installation de toutes les dépendances. En déplaçant l'appel de base au bas de ma priorité, j'ai corrigé le problème. Quelque chose que n'importe qui aurait pu voir à partir de ce que j'ai posté, donc vous obtenez les points parce que vous m'avez conduit à la solution. – PaulH

1

En utilisant AfterInstall événement

Créer AfterInstall événement dans votre classe service d'installation et de démarrer le service à l'aide ServiceController.

public ServiceInstaller() 
{ 
    InitializeComponent(); 
    this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall); 
} 

void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e) 
{ 
    ServiceController sc = new ServiceController(serviceInstaller1.ServiceName); 
    sc.Start(); 
} 

En utilisant l'événement Engagé

public ServiceInstaller() 
{ 
    InitializeComponent(); 
    this.Committed += new InstallEventHandler(ProjectInstaller_Committed); 
} 

void ProjectInstaller_Committed(object sender, InstallEventArgs e) 
{ 
    ServiceController sc = new ServiceController(serviceInstaller1.ServiceName); 
    sc.Start(); 
} 

Ou vous pouvez remplacer événement OnCommitted

protected override void OnCommitted(System.Collections.IDictionary savedState) 
    { 
     base.OnCommitted(savedState); 
     new ServiceController(serviceInstaller1.ServiceName).Start(); 
    } 

Autre que ci-dessus s'il vous plaît vérifiez les points suivants

  • Installer Type de démarrage: Automatique
  • compte: Système local

Autre que le programme d'installation de service vous devez avoir projet d'installation qui a créé en donnant la sortie principale du programme d'installation de service ci-dessus.

enter image description here

dans la configuration crée une action personnalisée au moins lors de l'installation en donnant la sortie service projet d'installation.

enter image description here

Plus d'informations à partir here. J'espère que cela vous aidera.

+0

N'est-ce pas ce que j'ai fait? – PaulH

+0

@PaulH S'il vous plaît vérifier ma réponse à jour. Cela fonctionne bien pour moi avec les paramètres ci-dessus. – Damith

Questions connexes