compaq, я бы делал как-то так:
Код | public string[] FindingDLL(string extension) { string pClasses = Registry.LocalMachine.Name + @"\Software\Classes\"; string pHandler = pClasses + @"{0}\PersistentHandler";
string HandlerValue = Registry.GetValue(string.Format(pHandler, extension), "", "") as string;
string pAddins = string.Format(@"Software\Classes\CLSID\{0}\PersistentAddinsRegistered", HandlerValue); string Value = ""; foreach (string GuidValue in Registry.LocalMachine.OpenSubKey(pAddins).GetSubKeyNames()) { string pAddin = Registry.GetValue( string.Join("\\", new string[] { Registry.LocalMachine.Name, pAddins, GuidValue } ), "", "") as string; Value += Registry.GetValue(string.Format(@"{0}CLSID\{1}\InprocServer32", pClasses, pAddin), "", "") as string + "|"; } return Value.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); }
|
В твоём же коде "Persis" вообще не нужен:
Код | public string FindingDLL(string extension) { RegistryKey SoftwareClassesKey = Registry.LocalMachine.OpenSubKey("Software\\Classes"); RegistryKey ExtensionKey = SoftwareClassesKey.OpenSubKey(extension); RegistryKey PersistentHandlerKey = ExtensionKey.OpenSubKey("PersistentHandler"); RegistryKey SoftwareClassesClsidKey = Registry.LocalMachine.OpenSubKey("Software\\Classes\\CLSID"); string PersistentHandlerValue = PersistentHandlerKey.GetValue("").ToString(); RegistryKey GuidKey = SoftwareClassesClsidKey.OpenSubKey(PersistentHandlerValue); RegistryKey PersistentAddinsRegisteredKey = GuidKey.OpenSubKey("PersistentAddinsRegistered"); //string Persis = PersistentAddinsRegisteredKey.ToString(); string[] GUID = PersistentAddinsRegisteredKey.GetSubKeyNames(); string GuidValue = GUID[0]; //Persis = Persis + "\\" + GuidValue;//!!!!!!!!!!!!!!!!!!!!!!!!!!! //string a = Persis.Substring(19); //RegistryKey SofKey = Registry.LocalMachine.OpenSubKey(a); RegistryKey SofKey = PersistentAddinsRegisteredKey.OpenSubKey(GuidValue); // !!!!!!!!!!!!! string Per = SofKey.GetValue("").ToString(); RegistryKey SoKey = SoftwareClassesClsidKey.OpenSubKey(Per); RegistryKey SosKey = SoKey.OpenSubKey("InprocServer32"); string Value = SosKey.GetValue("").ToString(); return Value; }
|
|