Ciągle otrzymuję „Nieprawidłowy zapytanie” wyjątek podczas próby wykonać następujące zapytanie:WMI NET Nieprawidłowe zapytanie
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskQuota WHERE QuotaVolume.DeviceID = 'C:'");
ManagementObjectCollection quotaCollection = searcher.Get();
Jednak to działa: „SELECT * FROM Win32_DiskQuota”.
Zgodnie z MSDN:
Dla większości zastosowań deskryptorów klasy w klauzuli WHERE, WMI flagi zapytanie jako nieważny i zwraca błąd. Jednak należy użyć operatora kropki (.) dla właściwości obiektu typu w WMI. Na przykład, następujące zapytanie jest ważny jeśli Prop jest ważna właściwość MojaKlasa i typ obiektu:
SELECT * FROM MojaKlasa GDZIE Prop.embedprop = 5
Czy to znaczy Zadziała tylko wtedy, Prop zadeklarowany jako OBJECT?
Oto szczegóły wyjątek:
System.Management.ManagementException was unhandled
HResult=-2146233087
Message=Invalid query
Source=System.Management
StackTrace:
в System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
в System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
в UserQuota.Program.getQuota() в c:\users\administrator\documents\visual studio 2015\Projects\UserQuota\UserQuota\Program.cs:строка 40
в UserQuota.Program.Main(String[] args) в c:\users\administrator\documents\visual studio 2015\Projects\UserQuota\UserQuota\Program.cs:строка 33
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException:
Wygląda dobrze. Musisz wychwycić wyjątek i wkleić jego zawartość do [edytuj]. Wywołaj ToString na obiekcie lub użyj okna dialogowego wyjątku (kliknij link "wklej zawartość do schowka" na dole). – Will
Dodałem wyjątek, ale wydaje mi się, że nie ma on zbyt wielu szczegółów ... –
Edytowałem swoją odpowiedź za pomocą przykładowego kodu, który, mam nadzieję, pomoże. – Tomer