Windows 7 Rus x64, Работаю под обычным юзером (т.е. не админ). Visual Studio 2010.
Под пользователем, не обладающим правами администратора пытаюсь програмно добавить запись в реестр в ветку HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.2\ACAD-7001:409\Applications. Если это же действие делать через regedit вручную - то добавляется без проблем (т.е. права на изменение данной ветви имеются), а если программно - не получается. В MSDN читал http://msdn.microsoft.com/ru-ru/library/h5e7chcf.aspx - вроде делаю всё по аналогии... В комментарии пометил строку, где получаю ошибку. Код:
Код | /// <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; } } }
|
Скрин результата:

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