Я постоянно получаю «Неверный запрос» исключение при попытке выполнить следующий запрос:WMI .NET Неверный запрос
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskQuota WHERE QuotaVolume.DeviceID = 'C:'");
ManagementObjectCollection quotaCollection = searcher.Get();
Однако это работает: «SELECT * FROM Win32_DiskQuota».
Согласно MSDN:
Для большинства применений класса дескрипторов в ИНЕКЕ, флаги WMI запрос недействительным и возвращает ошибку. Однако используйте оператор dot (.) для свойств объекта типа в WMI. Например, следующий запрос является действительным, если Prop является допустимым свойством MyClass и Тип объекта:
SELECT * FROM MyClass WHERE Prop.embedprop = 5
Означает ли это работает, только если Проп объявлен ОБЪЕКТОМ?
Вот подробности исключения:
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:
кажется правильным. Вам нужно поймать исключение и вставить содержимое в [edit]. Вызовите ToString на объекте или используйте диалог исключения (нажмите ссылку «Вставить содержимое в буфер обмена» внизу). – Will
Я добавил исключение, но, похоже, у него мало деталей ... –
Я отредактировал свой ответ с образцом кода, который, надеюсь, поможет. – Tomer