J'essaie de lancer un événement lorsqu'un utilisateur branche un périphérique USB. Pour l'instant, je me contente d'imprimer simplement quelque chose sur la console (dans le produit fini, il va lancer une application).Ouverture de mon application lorsqu'un périphérique USB est inséré sous Windows en utilisant WMI
Ce code est très vaguement adapté de: https://serverfault.com/questions/115496/use-wmi-to-detect-a-usb-drive-was-connected-regardless-of-whether-it-was-mounted
Il y a deux problèmes: 1) J'ai besoin de passer l'argument à la portée de gestion dynamique parce que ce sera installé sur les ordinateurs que je ne pas utiliser ou dont le nom Je ne sais pas. 2) J'obtiens une exception d'espace de noms invalide quand j'appelle w.Start();
Des idées que je fais mal?
static ManagementEventWatcher w=null;
static void Main(string[] args)
{
AddInstUSBHandler();
for(;;);
}
public static void USBRemoved(object sneder, EventArgs e)
{
Console.WriteLine("A USB device inserted");
}
static void AddInstUSBHandler()
{
WqlEventQuery q;
ManagementScope scope = new ManagementScope("HQ\\DEV1");
scope.Options.EnablePrivileges=true;
q=new WqlEventQuery();
q.EventClassName+="_InstanceCreationEvent";
q.WithinInterval=new TimeSpan(0,0,3);
[email protected]"TargetInstance ISA 'Win32_USBControllerdevice'";
w=new ManagementEventWatcher(scope,q);
w.EventArrived+=new EventArrivedEventHandler(USBRemoved);
w.Start();
}
J'ai ajouté le nom complet de l'ordinateur - et obtenu "classe non valide". Si je le change en \\\\ HQ \\ DEV1 \\ root \\ cimv2, (ce qui n'est pas le nom complet de l'ordinateur mais le chemin d'accès dans le domaine), j'obtiens "l'accès est refusé". Serait-ce parce que je ne suis pas l'administrateur de ma boîte? – rsteckly
Je le dirais. J'ai eu des problèmes similaires. Si vous allez dans Gestion de l'ordinateur -> Services et applications -> Contrôle WMI, vous ou votre système adim pouvez définir les autorisations. Je l'ai fait sur Windows 7 et XP mais je ne peux avoir accès sur XP. – hfitzwater