Le premier de ces deux verrouille un lecteur BitLocker. Le second InvokeMethod
lance: 'Chemin d'objet invalide'. Pourquoi? Ils semblent équivalents.
//Using a search: ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "SELECT * FROM Win32_EncryptableVolume WHERE DriveLetter = 'E:'"); foreach (ManagementObject classInstance1 in searcher.Get()) classInstance1.InvokeMethod("Lock", new object[] { true }); //Direct: ManagementObject classInstance2 = new ManagementObject("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume.DriveLetter='E:'", null); classInstance2.InvokeMethod("Lock", new object[] { 0 });//throws: 'Invalid object path'.
3 Réponses :
Il semble que vous n'appeliez pas get () code> méthode. Essayez ceci:
ManagementObject classInstance2 = new ManagementObject("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume.DriveLetter='E:'", null);
classInstance2.Get();
classInstance2.InvokeMethod("Lock", new object[] { 0 });
J'ai essayé et j'ai obtenu le "Chemin d'objet non valide" à la ligne Get
.
DriveLetter est-il la seule clé de la classe ??
Non. Et cela fonctionne réellement avec DeviceID mais mon code ne le sait pas. Il connaît la lettre.
C'est ça le truc. Vous ne pouvez récupérer l'instance que de manière «complète» en recherchant par les attributs clés. Je pense que votre meilleure chance est d'utiliser ManagementObjectSearcher
Merci. Avez-vous un lien concernant cette chose "attribut clé"?
Oui. Examinez la page 348 de ce livre:
Vous ne pouvez malheureusement pas instancier un objet en utilisant une propriété qui n'est pas une propriété clé. Une propriété clé dans WMI est une propriété qui a la CIM_Key qualifier , la documentation WMI donne plus de détails sur Qualificateur clé . Pour plus d'informations sur l'exigence WMI d'utiliser un chemin complet avec une clé pour référencer un objet, vous pouvez lire la documentation WMI sur Chemins d'objets d'instance . En C #, pour la classe particulière que vous avez spécifiée ( Un excellent utilitaire pour explorer WMI est WMI Explorer 2.0. Cela donne une excellente représentation visuelle des classes WMI. Dans cet utilitaire, les propriétés clés sont identifiées par un astérisque.
votes
Win32_EncryptableVolume
), vous ne pouvez accomplir ce que vous essayez de faire qu'en utilisant ManagementObjectSearcher
comme indiqué dans votre exemple. C'est parce que vous essayez d'obtenir une instance basée sur une propriété standard plutôt que sur une propriété clé.
Je suppose simplement que la bonne réponse est similaire à ce que les autres ont mentionné mais pas exactement.
La page de la classe mentionne que DeviceID
a la propriété suivante:
Qualificatifs: clé
Je suppose, faute de documentation réelle, que la recherche de quelque chose par leur clé renvoie la chose elle-même. Lorsque la recherche par autre chose renvoie une liste d'objets qui satisfont à cette condition. Même si la liste ne contient qu'une seule entrée - ce n'est pas l'objet lui-même mais plutôt une liste.
Mais si quelqu'un pouvait fournir de la documentation, ce serait bien.