Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление файла реестра и проверка на наличие, Проверка наличии новой ветки 
:(
    Опции темы
Eduard1
Дата 24.11.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Здравствуйте! 


Опишу вкратце свои действия: 
1) добавляю reg-ский файл в реестр  след образом 
Код
 
//Для Windows 7
                    ProcessStartInfo startInfo = new ProcessStartInfo((Environment.GetEnvironmentVariable("windir")) + "\\regedit.exe", "/s " + fname + "");
                    Process np = new Process();
                    startInfo.Verb = "runas";
                    np.StartInfo = startInfo;
                    np.Start();
 
А так если ОС Win XP 
Код
 
//Для Win XP
Process proc = new Process();
                    try
                    {
                        proc.StartInfo.FileName = "regedit.exe";
                        proc.StartInfo.UseShellExecute = false;
                        proc = Process.Start((Environment.GetEnvironmentVariable("windir")) + "\\regedit.exe", "/s " + fname + "");
                        if (proc != null) proc.WaitForExit();
                    }

                    finally
                    {
                        if (proc != null) proc.Dispose();
                    }
 

2) Проверяю добавилась ли ветка 

Вроде бы все хорошо в реестр все прописывается (в regedit), но когда я проверяю (см код ниже) программа не видит эту ветку (проблема только в Win7, на XP все работает отлично). 
Код

private void Verif(string _userId)
        {
            //----------Перевожу имя импортируемого контейнера
            byte[] inp_bytes = Encoding.Default.GetBytes(fcontName);
            string currContName = null;
            List<string> listContByte = new List<string>();


            foreach (int curbyte in inp_bytes)
            {
                currContName += curbyte.ToString();
            }

            //----------Перевожу имена уже установленных контейнеров 
            RegistryKey rk = null;
            //-------- 
            if (IntPtr.Size == 8)
            {
                rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Crypto Pro\\Settings\\USERS\\" + _userId + "\\Keys\\",true);
            }
            else
            {
                rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Crypto Pro\\Settings\\USERS\\" + _userId + "\\Keys\\",true);
            }
            //--------

            foreach (string st in rk.GetSubKeyNames())
            {
                string allContName = null;
                using (RegistryKey tempKey = rk.OpenSubKey(st,true))
                {

                    foreach (string valName in tempKey.GetValueNames())
                    {

                        if (valName == "name.key")
                        {
                            byte[] bytes = (byte[])tempKey.GetValue(valName);
                            for (int curByte = 4; curByte < bytes.Length; curByte++)
                            {
                                allContName += bytes[curByte].ToString();
                            }
                            listContByte.Add(allContName);
                        }
                    }
                }
            }
            int count = 0;
            foreach (string str in listContByte)
            {
                if (Equals(str, currContName))
                    count++;
            }


            if (count != 0) MessageBox.Show("Контейенер " + fcontName.ToString() + " успешно импортирован!", "Успех");
            else MessageBox.Show("Не удалось импортировать!", "Отказ");
        }
 

Подскажите в какой части допустил ошибку!
PM MAIL   Вверх
Fortnox
Дата 24.11.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Для Windows 7 открывать ветку реестра с разрешением записи можно только с повышением прав. Это так, к слову.
А дебажить не пробовали?
PM MAIL   Вверх
golfV
Дата 29.11.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: 1
Всего: 1



Попробуй так

Код

rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Wow6432Node\\Crypto Pro\\Settings\\USERS\\" + _userId + "\\Keys\\",true);


на Windows vista работает!
PM MAIL   Вверх
Eduard1
Дата 1.12.2011, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Да, но мне нужно проверить ветку HKLM.
Цитата

Попробуй так

код C#
1:
rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Wow6432Node\\Crypto Pro\\Settings\\USERS\\" + _userId + "\\Keys\\",true);


на Windows vista работает!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.