I have been beating my head against the wall trying out how to do this. I know it is a simply syntactical problem. I do not know how to form the query string.
I have been digging and digging and all I can find VBS scripts that do this and I have no idea how to do the equivalent in C#. I do know how to do some things, like look at processes or services. They do not need additional parameters, you just call the function and look at the responses.
IE:
Code://Make a connection to a remote computer using these options ManagementScope scope = new ManagementScope("\\\\198.31.1.1\\root\\cimv2", options); scope.Connect(); // Build a query for enumeration of Win32_Environment instances SelectQuery query = new SelectQuery("Win32_Process"); // Instantiate an object searcher with this query ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); // Call Get() to retrieve the collection of objects and loop through it foreach (ManagementBaseObject envVar in searcher.Get()) Console.WriteLine("Variable : {0}, Value = {1}", envVar["Name"],envVar["ExecutablePath"]);
Now how do you turn that into one that can enumerate all keys under HKLM / SOFTWARE?
The only part I know I have right, or at least I think I do is :
What I don't know what to is how to change this:Code:ManagementScope scope = new ManagementScope("\\\\198.31.1.1\\root\\default:StdRegProv", options);
Code:SelectQuery query = new SelectQuery("Win32_Process");
Secondly:
How are you supposed to find out what everything looks like so you can make queries for any objects and then know what 'values' to look for? I can't find any list of all the 'objects' I query, let alone adding things like all the values and whatnot assocated with them.
At best I find hoards of VBS scripts using WMI and I have no how to translate them into a C# query call.
For example:Is a VBS script that uses WMI to enum SYSTEM\CurrentControlSet\Services\Eventlog\System registry.Code:HKLM = 2147483650 ;HKEY_LOCAL_MACHINE sRegPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"; oLoc = CreateObject("WbemScripting.SWbemLocator") oSvc = oLoc.ConnectServer(computername, "root/default",user,password) oReg = oSvc.Get("StdRegProv") oMethod = oReg.Methods_.Item("EnumKey"); oInParam = oMethod.InParameters.SpawnInstance_(); oInParam.hDefKey = HKLM; oInParam.sSubKeyName = sRegPath; oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam); aNames = oOutParam.sNames; subkeylist = "" for i = 0 to ArrInfo(aNames,6)-1 name = aNames[i] ;Message("Subkeys", StrCat("KeyName: ", name)); subkeylist = StrCat(subkeylist,@tab,name) Next subkeylist = StrTrim(subkeylist) AskItemList(sRegPath,subkeylist,@tab,@unsorted,@single)
Which is pretty much what I want to do, but again, I have no idea how to do that in C# using WMI.




Reply With Quote