Création service, erreur sur démarrage : Pas utilisé par d'autres services ou pr [Résolu]

buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 9 oct. 2009 à 14:17 - Dernière réponse : buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention
- 11 oct. 2009 à 23:29
Bonjour,

Faisant suite à mon premier post, je souhaite créer un service qui fasse apparaître un message toutes les 10 minutes.

Un ex "bateau" pour commencer.

Certains services s'arrêtent s'ils ne sont pas utilisés par d'autre services ou programmes


Voici le code généré par défaut (non touché)
#Region " Component Designer generated code "

Public Sub New()
MyBase.New()

' This call is required by the Component Designer.
InitializeComponent()

' Add any initialization after the InitializeComponent() call

End Sub

'UserService overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

' The main entry point for the process
<MTAThread()> _
Shared Sub Main()
Dim ServicesToRun() As System.ServiceProcess.ServiceBase

' More than one NT Service may run within the same process. To add
' another service to this process, change the following line to
' create a second service object. For example,
'
'   ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
'
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}

System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub
    Friend WithEvents SystemTimer As System.Timers.Timer

    'Required by the Component Designer
    Private components As System.ComponentModel.IContainer

    ' NOTE: The following procedure is required by the Component Designer
    ' It can be modified using the Component Designer.  
    ' Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.SystemTimer = New System.Timers.Timer
        CType(Me.SystemTimer, System.ComponentModel.ISupportInitialize).BeginInit()
        '
        'SystemTimer
        '
        Me.SystemTimer.Enabled = True
        '
        'Service1
        '
        Me.ServiceName = "MonServiceAMoi"
        CType(Me.SystemTimer, System.ComponentModel.ISupportInitialize).EndInit()

    End Sub

#End Region


J'ai rejouté ça :

' DEMARRAGE DU SERVICE
    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Add code here to start your service. This method should set things
        ' in motion so your service can do its work.
        MessageBox.Show("Service Démarré")
        SystemTimer.Enabled = True
    End Sub
    'ARRET DU SERVICE
    Protected Overrides Sub OnStop()
        ' Add code here to perform any tear-down necessary to stop your service.
        MessageBox.Show("Service Arrêté")
    End Sub
    'MINUTERIE
    Private Sub SystemTimer_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles SystemTimer.Elapsed
        Dim eventlog1 As New EventLog
        If Not EventLog.SourceExists("MonServiceAMoi") Then
            EventLog.CreateEventSource("MonServiceAMoi", "Application")
        End If
        eventlog1.Source = "MonServiceAMoi"
        eventlog1.WriteEntry("This is a simple event log entry")
        MessageBox.Show("Minuterie ?")
    End Sub



Merci pour vos conseils

Cordialement.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 11 oct. 2009 à 14:59
3
Merci
As-tu bien ajouter les 2 composants installer ? (clic doit dans la fenetre de conception de ton service puis Ajouter le programme d'installation)

Si oui, as-tu bien définit la propriété ServiceType sur le composant ServiceInstaller ? As-tu également définit le compte qui utilisera le service par la propriété Account du composant ServiceProcessInstaller ?

De plus il me semble que l'affichage d'un messageBox nécessitera d'activer l'option 'Autoriser l'interaction avec le bureau' dans le second onglet des propriétés de ton service (dans le gestionnaire des services).

Willi.

Merci cs_Willi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_Willi
Meilleure réponse
buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 11 oct. 2009 à 23:29
3
Merci
Le problème originale venait bien des MessageBox, et du contrôle eventlog manquant permettant d'écrire dans le journal.

Reste 2 erreurs en suspend, je ferais 2 nouveaux posts.

Merci Willi !


MicroSoft Visual Basic Express 2008 (Débutant).

Merci buchholz35 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de buchholz35
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 10 oct. 2009 à 10:10
0
Merci
Bonjour,
Et donc comment se comporte ton service ? Le timer fonctionne t-il ? S'arrete-il une fois démarré ?

Willi.
Commenter la réponse de cs_Willi
buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 10 oct. 2009 à 22:51
0
Merci
Bonsoir Willi,

pour répondre clairement à ta question, rien ne se passe, le service "MonServiceAMoi" est bien installé et listé, mais ne démarre pas automatiquement (Manuel), surement des options à definir ...

Lorsque je clique sur le bouton "démarrer" , c'est à ce moment que windows m'affiche ce message "Le service n'a pas démarré ... Certains services s'arrêtent s'ils ne sont pas utilisés par d'autre services ou programmes".

Aucune action définie dans ma source ne s'execute.

Merci de t'interesser à mon cas

Cordialement.
Commenter la réponse de buchholz35
buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 11 oct. 2009 à 18:42
0
Merci
Bonjour Willi, je vais tenter de répondre clairement à tes questions:


As-tu bien ajouter les 2 composants installer ? (clic doit dans la fenetre de conception de ton service puis Ajouter le programme d'installation)


Je ne disposes pas (sauf erreur de ma part), de cette option !
Express 2008 ...

J'ai donc suivi le tuto version 2 pour l'installation du service via un programme tierce . (2 boutons Install / Remove service), qui visiblement fonctionne bien.

Cependant, j'ai quand même réaliser ces opérations :
- Ajout de la référence System.Configuration.Install (+ Ajout dans espace de nom importés)
- Ajout de la ligne dans service1.vb
Imports System.ServiceProcess

- Ajout de la nouvelle classe class1.vb
Imports System
Imports System.Collections
Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.ComponentModel

<RunInstallerAttribute(True)> _
Public Class MyProjectInstaller
    Inherits Installer
    Private serviceInstaller1 As ServiceInstaller
    Private processInstaller As ServiceProcessInstaller

    Public Sub New()
        ' Instantiate installers for process and services.
        processInstaller = New ServiceProcessInstaller()
        serviceInstaller1 = New ServiceInstaller()
        ' The services will run under the system account.
        processInstaller.Account = ServiceAccount.LocalSystem
        ' The services will be started manually.
        serviceInstaller1.StartType = ServiceStartMode.Manual
        ' ServiceName must equal those on ServiceBase derived classes.
        serviceInstaller1.ServiceName = "MonServiceAMoi"
        ' Add installers to collection. Order is not important.
        Installers.Add(serviceInstaller1)
        Installers.Add(processInstaller)
    End Sub
End Class

- Ajout de la référence System.serviceProcess (+ Ajout ..)
- Ajout de l'espace de nom importé : System.ComponentModel
- Modifié le type de démarrage :
serviceInstaller1.StartType = ServiceStartMode.Automatique

(Vérifié, pris en compte lors de l'installation)



as-tu bien définit la propriété ServiceType sur le composant ServiceInstaller ?


ServiceType n'existe pas pour serviceInstaller1 ...

Ou je ne comprends pas ta question .


As-tu également définit le compte qui utilisera le service par la propriété Account du composant ServiceProcessInstaller ?


Oui :
processInstaller.Account = ServiceAccount.LocalSystem




De plus il me semble que l'affichage d'un messageBox nécessitera d'activer l'option 'Autoriser l'interaction avec le bureau' dans le second onglet des propriétés de ton service (dans le gestionnaire des services).


Aïe !!

Idem, pas d'option du fait de ma version express ...
Cela ne peut-il pas être fait par variables ?



Dans tous les cas, merci pour ta contribution.

Cordialement.
Commenter la réponse de buchholz35
buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 11 oct. 2009 à 18:58
0
Merci
Bon, de bonnes nouvelles, le service fonctionne !!!

Le message "Minuterie ?" se déclenche bien , reste à vérifier la fréquence.

Mon soucis : incapable de déterminer l'action qui a provoquer la mise en route, voici mes 2 dernieres actions :

-Ajout du service Service1 dans Class1, puis suppression, re-compilation, mais le service fonctionne toujours ...
-Tentative de forcer l'option "Activer l'infrastructure de l'application" (Qui a échoué)

Rien d'autre ....

Cordialement.
Commenter la réponse de buchholz35
buchholz35 17 Messages postés vendredi 4 août 2006Date d'inscription 11 octobre 2009 Dernière intervention - 11 oct. 2009 à 19:13
0
Merci
Ouulala !

On oublie mon dernier post ?

Le service ne démarre pas du tout, malgré les changements en automatique.
Par contre l'évènnement SystemTimer_Elapsed est appelé alors que le service n'est pas démarré

Je vais mettre des messageBox un peu partout pour analyser se qui se passe réellement.

Cordialement.
Commenter la réponse de buchholz35

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.