Как обработать строку из реестра

191
04 ноября 2018, 05:00

Всех приветствую, вот небольшую задачку делаю. Достаю из реестра данных о файлах запускающихся при старте системы. В коде, я достаю имя файла, достаю путь этого файла, и там еще в строке где путь, есть параметры запуска. Можно ли как то эти параметры достать из реестра отдельно, или нужно разбирать строку, например регексом или еще как.

// в методе Main()
     RegistryKey rk = Registry.LocalMachine;
            var so = rk.OpenSubKey("Software");
            var mk = so.OpenSubKey("Microsoft");
            var win = mk.OpenSubKey("Windows");
            var Currver = win.OpenSubKey("CurrentVersion");
            var RUN = Currver.OpenSubKey("Run");
            PrintKeys(RUN);// из реестра автозагрузка

// собственно сам метод
 static void PrintKeys(RegistryKey rkey)
        {
            int caunt = rkey.ValueCount;
            String[] names = rkey.GetValueNames();
            string[] keys = new string[caunt];
            for (int i = 0; i < keys.Length; i++)
            {
                keys[i] = (string)rkey.GetValue(names[i]);
            }
            int icount = 0;
            Console.WriteLine("-----------------------------------------------");
            Console.WriteLine("Subkeys of " + rkey.Name);
            Console.WriteLine("-----------------------------------------------");
            // Print the contents of the array to the console.
            foreach (String s in keys)
            {
                Console.WriteLine("{0}--{1}",names[icount],keys[icount]);

                icount++;
                if (icount >= 100)
                    break;
            }
        }
Answer 1

Если верно понимаю суть изложенного автором вопроса, то решение можно, скажем, представить так:

using System;
using System.Linq;
using Microsoft.Win32;
internal sealed class Program {
   static void Main() {
      String rp = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
      using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(rp)) {
         if (null == rp) return;
         var e = rk.GetValueNames().Select(n => new {
            Name = n, Value = rk.GetValue(n),
            Exec = rk.GetValue(n).ToString()
                     .Split('"').Where(i => !String.IsNullOrEmpty(i)).First()
         });
         foreach (var x in e)
            Console.WriteLine(
               "Name: {0}\nPath: {1}\nExec: {2}\n", x.Name, x.Value, x.Exec
            );
      }
   }
}
READ ALSO
Передать данные в контроллер

Передать данные в контроллер

Имеется форма веб-приложения, хочу передать данные с нее в объект внутрь ajax, чтобы он в последствии передал их в контроллер, но только примерно...

194
Возврат некорректного значения

Возврат некорректного значения

Создал массив состояний заказа, создал enum-ы под состояния заказа, ввожу в консоль ID заказа возвращается его статусПри вводе в консоль ID заказа,...

154
Как передать json из C# в Python

Как передать json из C# в Python

пожалуйста подскажите: Есть ли способ как запустить скрипт питона из С# передав(или в последствии передать) ему Json объект, и потом принять...

158
cascade delete related tables in Entity Framework

cascade delete related tables in Entity Framework

Модель связных таблиц

160