0nn2belle
Messages postés16Date d'inscriptionvendredi 28 novembre 2008StatutMembreDernière intervention28 juin 2011
-
29 avril 2010 à 19:47
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 2011
-
29 avril 2010 à 21:58
Bonsoir tout le monde,
Je suis débutante en C# et je suis confrontée à un souci qui, je l'espère, n'est pas de taille !!
En fait je dois créer un service Windows qui doit bloquer des processus (des applications en gros).
Pour ça, j'ai déjà un code en vb.net, qui fonctionne. Ce code est constitué d'une BDD Access qui contient une table avec un identifiant et un champ contenant le nom du processus, une DLL et le service Windows.
J'ai réussi à générer la dll et le service Windows. Le seul hic est que le service ne veut pas démarrer ! Et je ne sais pas d'où vient le souci, mais alors vraiment pas du tout, et je suis sur ce problème depuis ce matin, 8h30...
Je vous expose mes fichiers.cs :
Idata et CLdata, les fichiers de ma dll
Idata.cs, mon interface
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LIB_data
{
//Création de l'interface
public interface Idata
{
/*string IfileTYPE
{
get;
}*/
string IfileDB
{
get;
}
System.Data.DataSet getExE();
}
}
CLdata, ma classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Data.OleDb;
namespace LIB_data
{
public class CLdata : Idata
{
#region Private Members
private System.IO.StreamReader oSR;
private IDbConnection oCNX;
private IDbCommand oCMD;
private IDbDataAdapter oDA;
private System.Data.DataSet oDS;
private string R_sql;
//private string DBTYPE;
//private string SQLSERVER = "MSSQLSERVER";
//private string MSACCESS = "MSACCESS";
#endregion
#region Interface CLdata
public CLdata()
{
this.R_sql = "SELECT * FROM TB_INTERDIT";
/*this.oSR = new System.IO.StreamReader(((Idata)this).IfileTYPE);
this.DBTYPE = this.oSR.ReadToEnd();*/
// C'est ici que le coté générique de notre classe prend forme
//if ((this.DBTYPE == this.MSACCESS))
{
this.oSR = new System.IO.StreamReader(((Idata)this).IfileDB);
this.oCNX = new System.Data.OleDb.OleDbConnection(this.oSR.ReadLine());
this.oCMD = new System.Data.OleDb.OleDbCommand();
this.oDA = new System.Data.OleDb.OleDbDataAdapter();
}
/*if ((this.DBTYPE == this.SQLSERVER))
{
this.oSR = new System.IO.StreamReader(((Idata)this).IfileDB);
this.oCNX = new System.Data.SqlClient.SqlConnection(this.oSR.ReadLine());
this.oCMD = new System.Data.SqlClient.SqlCommand();
this.oDA = new System.Data.SqlClient.SqlDataAdapter();
}*/
{
this.oCMD.CommandText = this.R_sql;
this.oCMD.CommandType = CommandType.Text;
this.oCMD.Connection = this.oCNX;
}
{
this.oDA.SelectCommand = this.oCMD;
}
this.oDS = new System.Data.DataSet();
}
#endregion
#region Idata Members
string LIB_data.Idata.IfileDB
{
get
{
return "C:\\Users\\Annabelle\\Desktop\\Projet Archi.net\\Test des tutos sur les services windows\\LIB_data\\data\\connectionString.dat";
}
}
/*string LIB_data.Idata.IfileTYPE
{
get
{
return "C:\\Users\\Annabelle\\Desktop\\Projet Archi.net\\Test des tutos sur les services windows\\LIB_data\\data\\typeDB.dat";
}
}*/
#endregion
#region Function of Idata
System.Data.DataSet Idata.getExE()
{
this.oCMD.CommandText = this.R_sql;
this.oDA.Fill(this.oDS);
return this.oDS;
}
#endregion
}
}
Service1.cs, le code de mon service windows (à côté j'ai un projectinstaller et un eventlog, mais on s'en moque pour le coup)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
namespace Service_windows
{
public partial class Service1 : ServiceBase
{
private int i;
private LIB_data.Idata oDATA;
private System.Data.DataSet oDS;
private Process[] all_process = new Process[11];
private Process process;
private string PROCCESS_NAME;
private int count_proccess_interdit;
private short countPassage;
private System.Timers.Timer tim = new System.Timers.Timer(5000);
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
tim.Elapsed += mvTimer_Elapsed;
this.i = 0;
this.countPassage = 0;
this.oDATA = new LIB_data.CLdata();
this.oDS = this.oDATA.getExE();
this.count_proccess_interdit = this.oDS.Tables[0].Rows.Count;
this.tim.Enabled = true;
this.evt_interdit.WriteEntry("Service Windows démarré");
}
protected override void OnStop()
{
}
protected override void OnPause()
{
base.OnPause();
this.evt_interdit.WriteEntry("Service Windows en pause");
}
private void mvTimer_Elapsed(object pSender, System.Timers.ElapsedEventArgs ByValpArgs)
{
this.PROCCESS_NAME = this.oDS.Tables[0].Rows[i].ItemArray[1].ToString();
this.all_process = System.Diagnostics.Process.GetProcessesByName(PROCCESS_NAME);
if (all_process.Length > 0)
{
this.process = all_process[0];
this.process.Kill();
}
this.i += 1;
if (this.i == this.count_proccess_interdit)
{
i = 0;
}
this.countPassage += 1;
if (this.countPassage == 10)
{
this.countPassage = 0;
GC.Collect();
}
}
}
}
Voilà !
Je ne demande pas à ce que l'on me demande la réponse sur un plateau d'argent (sauf si vous l'avez :D) mais au moins si vous avez des pistes de solution !!
Je précise que je n'ai pas le choix sur les technologies utilisées (dll, service windows et access) et aussi que je suis desespérée
0nn2belle
Messages postés16Date d'inscriptionvendredi 28 novembre 2008StatutMembreDernière intervention28 juin 20111 29 avril 2010 à 20:59
C'est bon problème résolu, le code est tout à fait fonctionnel
En fait le souci venait de.... l'eventlog, j'avais oublié de renseigner la source.
Je ne sais pas pourquoi mais du coup le service ne voulait pas démarrer.
Mais le service fonctionne correctement c'est l'essentiel