Continuo a ricevere un'eccezione "Invalid query" quando si tenta di eseguire la query seguente:query WMI .NET valido
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskQuota WHERE QuotaVolume.DeviceID = 'C:'");
ManagementObjectCollection quotaCollection = searcher.Get();
Tuttavia questo funziona: "SELECT * FROM Win32_DiskQuota".
Secondo MSDN:
Per la maggior parte degli utilizzi di descrittori di classe in una clausola WHERE, WMI bandiere la query come non valido e restituisce un errore. Tuttavia, utilizzare l'operatore punto (.) per le proprietà dell'oggetto tipo in WMI. Ad esempio, la seguente query è valida se Prop è una struttura valida di MyClass ed è tipo di oggetto:
SELECT * FROM WHERE MyClass Prop.embedprop = 5
Vuol dire questo funziona solo se Prop dichiarato come OBJECT?
Ecco i dettagli di eccezione:
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:
guarda a destra. Devi catturare l'eccezione e incollare il contenuto in una [modifica]. Chiama ToString sull'oggetto o utilizza la finestra di dialogo delle eccezioni (fai clic sul link "incolla contenuto negli appunti" in basso). – Will
Ho aggiunto l'eccezione ma sembra che non abbia molti dettagli ... –
Ho modificato la mia risposta con un codice di esempio che si spera possa essere d'aiuto. – Tomer