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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удаётся добавить запись в реестр, Добавление записи в реестр 
:(
    Опции темы
Compositum
Дата 13.2.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Windows 7 Rus x64, Работаю под обычным юзером (т.е. не админ). Visual Studio 2010.

Под пользователем, не обладающим правами администратора пытаюсь програмно добавить запись в реестр в ветку HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7001:409\Applications. Если это же действие делать через regedit вручную - то добавляется без проблем (т.е. права на изменение данной ветви имеются), а если программно - не получается. В MSDN читал это - вроде делаю всё по аналогии...
В комментарии пометил строку, где получаю ошибку.
Код:
Код

        /// <summary>
        /// Регистрация в реестре .Net-плагина, для его последующей автоматической загрузки в
        /// версии AutoCAD, которой соответствует данная ветвь реестра.
        /// </summary>
        /// <param name="acadVersion">Ветка реестра искомой версии AutoCAD</param>
        /// <param name="plaginName">Наименование плагина</param>
        /// <param name="fileName">Полное имя dll-файла загружаемой .Net-библиотеки</param>
        public void RegisterLibrary(RegistryKey acadVersion, string plaginName, string fileName)
        {
            RegistryKey parentKey = acadVersion.OpenSubKey("Applications");
            int keyLength = (Path.Combine(parentKey.Name, plaginName)).Length;
            //Длина имени ветви в реестре не должна превышать 255 символов
            if (keyLength > 255)
            {
                //Добавляем запись в журнал регистрации ошибок...
                XElement record = new XElement("Error", new XAttribute("UniversalDateTime", DateTime.Now.ToUniversalTime().ToShortDateString() + " "
                    + DateTime.Now.ToUniversalTime().ToShortTimeString()), new XAttribute("Operation", "Вызов метода 'RegisterLibrary'"),
                    new XAttribute("ParrentKey", parentKey.Name), new XAttribute("NewSubKeyName", plaginName), new XAttribute("Description", "Общая длина имени создаваемой ветви превышает 255 символов."));
                Console.WindowWidth = 150;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Error.WriteLine(record);
                Console.ForegroundColor = consoleForegroundColor;
                return;
            }
#if DEBUG            
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Общая длина имени новой ветви составит {0} символов, при максимально допустимом 255.", keyLength);
            Console.ForegroundColor = consoleForegroundColor;
#endif
            if (File.Exists(fileName))
            {
                try
                {                    
                    //Ошибка вылетает в следующей строке:
                    RegistryKey key = parentKey.CreateSubKey(plaginName);//Новая ветвь, содержащая информацию о плагине

                    key.SetValue("LOADER", fileName, RegistryValueKind.String);//Указываем полное имя dll-файла, который следует автоматически загружать
                    key.SetValue("LOADCTRLS", "00000002", RegistryValueKind.DWord);//Ставим метку о том, что библиотеку следует загружать при открытии приложения
                    key.SetValue("MANAGED", "00000001", RegistryValueKind.DWord);// Ставим метку о том, что код библиотеки является управляемым  
                    key.Close();
                }
                catch (Exception ex)
                {
                    //Добавляем запись в журнал регистрации ошибок...
                    XElement record = new XElement("Exception", new XAttribute("ExceptionType", ex.GetType().ToString()), new XAttribute("UniversalDateTime", DateTime.Now.ToUniversalTime().ToShortDateString() + " " 
                        + DateTime.Now.ToUniversalTime().ToShortTimeString()), new XAttribute("Operation", "RegistryKey.CreateSubKey"),
                        new XAttribute("ParrentKey", parentKey.Name), new XAttribute("Description", "Пытаюсь добавить новый подраздел в ветвь реестра."), 
                        new XAttribute("ErrorMessage", ex.Message)); 
                    Console.WindowWidth = 150;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Error.WriteLine(record);
                    Console.ForegroundColor = consoleForegroundColor;
                }
            }
        }


Скрин результата:

user posted image

Почему не удаётся добавить запись?

Это сообщение отредактировал(а) Compositum - 13.2.2010, 13:04
PM   Вверх
Compositum
Дата 13.2.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Вопрос снят, строку
Код

RegistryKey parentKey = acadVersion.OpenSubKey("Applications");

нужно заменить на
Код

RegistryKey parentKey = acadVersion.OpenSubKey("Applications", true);

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

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


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

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


 




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


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

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