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
CLdata, ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 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(); } }
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 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 } }
Voilà !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 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(); } } } }
Je ne demande pas à ce que l'on me demande la réponse sur un plateau d'argent (sauf si vous l'avez ) 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
Merci d'avance !!
Annabelle
Partager