Bonjour,
Je souhaiterais installer un service qui, à l'état démarré, execute un bout de code à l'infini et ne s'arrête que quand on l'arrête manuellement.
Comment je pourrais faire?
Bonjour,
Je souhaiterais installer un service qui, à l'état démarré, execute un bout de code à l'infini et ne s'arrête que quand on l'arrête manuellement.
Comment je pourrais faire?
En fait, j'ai déjà créer une solution de type (service Windows) avec C# qui permet de créer un service qui execute dans son OnStart une procédure stockée de SQL Server. Mais elle l'execute uniquement une seule fois et se met à l'état démarré alors que je souhaiterais que même à l'état démarré, cette même procédure s'execute chaque minute par exemple.
Pour ce qui est du langage, en C# ou en C , C ++. Je sais pas lequel conviendrait le mieux..
Il me semble qu'en C#, ca m'arrangerait plus.
voila ma méthode OnStart
protected override void OnStart(string[] args)
{
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = "demarrer";
SqlConnection MyConnection = new SqlConnection("server=(local);database=master;Trusted_Connection=yes;");
MyConnection.Open();
sqlCmd.Connection = MyConnection;
sqlCmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(sqlCmd);
DataTable dt = new DataTable("tbl");
da.Fill(dt);
sqlCmd.Dispose();
MyConnection.Close();
// TODO: Add start code here (if required) to start your service.
}
Voila ma méthode OnStop()
Voila ce qu'il y a dans le mainprotected override void OnStop()
{
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = "arreter";
SqlConnection MyConnection = new SqlConnection("server=(local);database=master;Trusted_Connection=yes;");
MyConnection.Open();
sqlCmd.Connection = MyConnection;
sqlCmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(sqlCmd);
DataTable dt = new DataTable("tbl");
da.Fill(dt);
sqlCmd.Dispose();
MyConnection.Close();
// TODO: Add tear-down code here (if required) to stop your service.
}
static void Main()
{
// To run more than one service you have to add them here
ServiceBase.Run(new ServiceBase[] { new AO() });
}
Je pense que c'est dans le main qu'il faut écrire une boucle après le "ServiceBase.Run(new ServiceBase[] { new AO() });"
while (le service n'est pas terminé)
{
refaire exactement le même code que celui du OnStart()
}
Je sais pas si c'est une bonne idée ...
Merci d'avance de votre aide
je pense qu'il faudrait faire un while autour de ton servicebase.run :
executer un service = executer le onstart.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while (le service n'est pas terminé) { ServiceBase.Run(new ServiceBase[] { new AO() }); }
ça ne marche pas. :s
Je pense plutôt que ServiceBase.Run c'est executer le OnStart et se mettre dans un état démarré. Or le service ne fait rien à l'état démarré, donc je pense qu'il n'atteint même pas l'instruction le while
Salut,
je pense que l'idée du while est la bonne
par contre, il faut le mettre dans une méthode à part...
pourquoi ne pas lancer un évènement dans le OnStart et lever un flag 'EnCoursDExecution'
et mettre le while(EnCoursDExecution) dans la méthode déclanchée par l'évènement
dans le OnStop, il faudrait baisser le flag EnCoursDExecution
et le service s'arrêterait...
enfin, il y aurait peut être bien une ptite subtilité du genre attendre que la boucle while, donc la méthode d'exécution se termine avant de quitter le OnStop
ce qui pourrait se faire avec un autre flag et une autre boucle d'attente
...
enfin je sais pas si ça serait très propre...
Partager