Problème avec WMI

el_filosof Messages postés 3 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 23 septembre 2007 - 23 sept. 2007 à 16:24
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 - 26 sept. 2007 à 13:47
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);
}
 
}
}

1 réponse

t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
26 sept. 2007 à 13:47
Une première solution serait de restreindre le temps d'exécution de lma méthode de collecte des données regarde ce code qui devrait t'aider
0
Rejoignez-nous