Bonjour,
Je travaille avec le framework 2.0, et je developpe une application qui récupère des infos sur les process grace a WMI.
J'ai deux problèmes:
-Le premier est que mon application ne fonctionne pas lorsque je la compile et que je l'éxecute avec Visual studio 2005. Je suis obligé de la compiler puis d'executer le .exe en dehors de visual, et la cela fonctionne bien.
-Mon deuxieme problème est que il arrive que WMI ne réponde plus du tout et dans ce cas mon application ne me retourne rien. Je suis obligé de reboot mon pc pour que cela fonctionne de nouveau.
D'ou cela peut il venir ?
Merci par avance pour vos réponses,
pour info je suis sous windows xp sp2 version 32bit et vous trouverez mon code ci-dessous:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Diagnostics;
using System.Threading;
namespace repere
{
public partial class Form1 : Form
{
public ManagementEventWatcher watcher;
public Form1()
{
InitializeComponent();
}
publicvoid HandleEvent(object sender, EventArrivedEventArgs e)
{
richTextBox1.Text += ("\n----------------------------------------------------\n");
String allthread = "Tous les threads: ";
try
{
Process[] allProcs = Process.GetProcesses();
foreach(Process proc in allProcs)
{
ProcessThreadCollection myThreads = proc.Threads;
if(proc.Id.ToString() == e.NewEvent["ProcessID"].ToString())
{
richTextBox1.Text += ("Nom PROCESS: " + proc.ProcessName.ToString() + "\n");
foreach(ProcessThread pt in myThreads)
{
allthread += ( pt.Id + " | ");
}
}
}
richTextBox1.Text += (allthread + "\n");
}
catch(ManagementException err)
{
Console.WriteLine("erreur: " + err.Message+"\n");
}
}
publicdelegatevoid delegatethstart(String id_proc);
publicvoid thstart(String id_proc)
{
try
{
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_ThreadStartTrace where ProcessID="+id_proc);
watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
watcher.Start();
}
catch(ManagementException err)
{
richTextBox1.Text += ("Erreur: " + err.Message);
}
}
privatevoid button1_Click(object sender, EventArgs e)
{
delegatethstart dele_thread = new delegatethstart(thstart);
IAsyncResult iAr;
iAr = dele_thread.BeginInvoke(textBox1.Text,null, null);
richTextBox1.Text += ("En attente du processus..." + textBox1.Text);
}
}
}