当前位置: 首页 > 编程语言 > C#

如果我不知道它的类型,如何从远程计算机获取注册表值?(C#)Share

时间:2023-04-11 11:21:44 C#

如果我不知道它的类型,如何从远程计算机获取注册表值?(C#)根据存储值的类型,我必须使用以下方法之一:GetBinaryValueGetDWORDValueGetExpandedStringValueGetMultiStringValueGetStringValue如果我知道的值是hive、键和值名称,我不想尝试所有五个.有没有办法做到这一点?我正在使用WMI,但如果唯一的方法是使用advapi32.dll方法,我愿意接受它。您可以使用StdRegProv.EnumValues方法枚举一个键的值,找出值的类型并确定调用哪个Get方法。这种事情(抱住,我不太明白C#所以这段代码可能远非完美):usingSystem;使用系统管理;使用System.Management.Instrumentation;namespaceConsoleApplication1{publicenumRegHive:uint{HKEY_CLASSES_ROOT=0x80000000,HKEY_CURRENT_USER=0x80000001,HKEY_LOCAL_MACHINE=0x80000002,HKEY_USERS=0x80000003,HKEY_CURRENT_CONFIG=0x80000005}publicenumRegType{REG_SZ=1,REG_EXPAND_SZ,REG_BINARY,REG_DWORD,REG_MULTI_SZ=7}classProgram{staticvoidMain(string[]args){conststringstrComputer="computername";ConnectionOptions选项=newConnectionOptions();options.Impersonation=ImpersonationLevel.Impersonate;options.EnablePrivileges=true;options.Username="用户名";options.Password="密码";ManagementScopemyScope=newManagementScope("\\"+strComputer+"\root\default",options);ManagementPathmypath=newManagementPath("StdRegProv");ManagementClassmc=newManagementClass(myScope,mypath,null);对象oValue=GetValue(mc,RegHive.HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion","ProgramFilesDir");Console.WriteLine(oValue.ToString());}publicstaticobjectGetValue(ManagementClassmc,RegHivehDefKey,stringsSubKeyName,stringsValueName){RegTyperType=GetValueType(mc,hDefKey,sSubKeyName,sValueName);ManagementBaseObjectinParams=mc.GetMethodParameters("GetStringValue");inParams["hDefKey"]=hDefKey;inParams["sSubKeyName"]=sSubKeyName;inParams["sValueName"]=sValueName;对象oValue=null;switch(rType){caseRegType.REG_SZ:ManagementBaseObjectoutParams=mc.InvokeMethod("GetStringValue",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){oValue=outParams["sValue"];}else{//GetStringValue调用失败}break;案例RegType.REG_EXPAND_SZ:outParams=mc.InvokeMethod("GetExpandedStringValue",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){oValue=outParams["sValue"];}else{//GetExpandedStringValue调用失败}break;案例RegType.REG_MULTI_SZ:outParams=mc.InvokeMethod("GetMultiStringValue",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){oValue=outParams["sValue"];}else{//GetMultiStringValue调用失败}break;案例RegType.REG_DWORD:outParams=mc.InvokeMethod("GetDWORDValue",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){oValue=outParams["uValue"];}else{//GetDWORDValue调用失败}break;案例RegType.REG_BINARY:outParams=mc.InvokeMethod("GetBinaryValue",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){oValue=outParams["uValue"]asbyte[];}else{//GetBinaryValue调用失败}break;}返回值;}publicstaticRegTypeGetValueType(ManagementClassmc,RegHivehDefKey,stringsSubKeyName,stringsValueName){ManagementBaseObjectinParams=mc.GetMethodParameters("EnumValues");inParams["hDefKey"]=hDefKey;inParams["sSubKeyName"]=sSubKeyName;ManagementBaseObjectoutParams=mc.InvokeMethod("EnumValues",inParams,null);如果(Convert.ToUInt32(outParams["ReturnValue"])==0){string[]sNames=outParams["sNames"]asString[];int[]iTypes=outParams["Types"]asint[];for(inti=0;iOpenRemoteBaseKey,GetValue()怎么样?http://msdn.microsoft.com/en-us/library/8zha3xws(VS.100).aspx以上是C#学习教程:HowtogettheregistryvaluefromaremotecomputerifIdon'tknowitstype?(C#)分享全部内容如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:

最新推荐
猜你喜欢