Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

Запись в реестр   Найти похожие ветки 

 
petr   (2009-07-08 11:41) [0]

Здравствуйте!!! Подскажите пожалуйста, почему не происходит создание и запись значения параметра в реестр. Все Вроде правильно написано на мой взгляд.  Вот мой код
ip := TRegistry.Create;
ip.RootKey:=HKEY_LOCAL_MACHINE;
ip.OpenKey("Software", true);
ip.OpenKey("Microsoft", true);
ip.OpenKey("Windows", true);
if ip.ValueExists("IP") then
begin
if ip.ReadString("IP")=Edit1.Text then
begin Showmessage("Вы уже работали с IP-адресом "+ip.ReadString("IP"));
button1.Enabled:=false; button2.Enabled:=false;exit;end
else
ip.writestring("IP",Edit1.Text);
ip.Free;
end;


 
Anatoly Podgoretsky ©   (2009-07-08 11:50) [1]

> petr  (08.07.2009 11:41:00)  [0]

Бр,

Утечки, отсутсвия понятия о защите ресурсов, защита от ошибок пользователя, да еще и в системную, чужую ветку реестра залез.


 
Dennis I. Komarov ©   (2009-07-08 11:57) [2]


> да еще и в системную, чужую ветку реестра залез.

Ну чем же мы хуже мелкомягких...


 
petr   (2009-07-08 12:05) [3]

Я просто учусь работать с реестром. Вот код
REG := TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey("Software", true);
reg.OpenKey("Microsoft", true);
reg.OpenKey("Windows", true);
if reg.ValueExists("money") then
else   begin
 reg.writestring("money","0"); end;

все работает, а
ip := TRegistry.Create;
ip.RootKey:=HKEY_LOCAL_MACHINE;
ip.OpenKey("Software", true);
ip.OpenKey("Microsoft", true);
ip.OpenKey("Windows", true);
if ip.ValueExists("IP") then
begin
if ip.ReadString("IP")=Edit1.Text then
begin Showmessage("Вы уже работали с IP-адресом "+ip.ReadString("IP"));
button1.Enabled:=false; button2.Enabled:=false;exit;end
else
ip.writestring("IP",Edit1.Text);
ip.Free;
end;

не работает, хотя очень похож


 
Anatoly Podgoretsky ©   (2009-07-08 12:09) [4]

А это похоже на лохотрон, мошенничество.


 
Loginov Dmitry ©   (2009-07-08 22:58) [5]


> Я просто учусь работать с реестром.


Несмотря на не слишком уж и большой объем кода, ошибок слишком много. Нужно хотя бы так:


 ip := TRegistry.Create;
 try
   ip.RootKey:=HKEY_LOCAL_MACHINE;
   if ip.OpenKey("Software\Microsoft\Windows", True) then
   begin
     if ip.ValueExists("IP") then
     begin
       if ip.ReadString("IP")=Edit1.Text then
       begin
         Showmessage("Вы уже работали с IP-адресом "+ip.ReadString("IP"));
         button1.Enabled:=false;
         button2.Enabled:=false;
         exit;
       end else
         ip.writestring("IP",Edit1.Text);
     end;
   end else
     raise Exception.Create("Не удалось открыть раздел Software\Microsoft\Windows "+
       "для записи. Вероятно, у пользователя не достаточно прав.");
 finally
   ip.Free;
 end;


И лезть в системный раздел HKEY_LOCAL_MACHINE часто не обязательно. Он требует на запись права администратора. Запустил программу под администратором, сменил настройки, пользователь без прав их не испортит. Чтение - без проблем, но с помощью OpenKeyReadOnly.
Для хранения пользовательских параметров (своих для каждого пользователя) используется раздел HKEY_CURRENT_USER. Для всех прочих параметров используются файлы конфигурации (ini, xml), базы данных и т.п.


 
Dennis I. Komarov ©   (2009-07-09 09:42) [6]


> petr   (08.07.09 12:05) [3]

У меня бы и первый не отработал :P

Создай себе ветку и учись, чего к мелкомягким то полез? У них вкуснее?


 
brother ©   (2009-07-09 09:46) [7]

> чего к мелкомягким то полез? У них вкуснее?


> if reg.ValueExists("money") then

шифроваться от взлома вздумал имхо


 
Dennis I. Komarov ©   (2009-07-09 09:57) [8]


> brother ©   (09.07.09 09:46) [7]

Ну-ну :)


 
Anatoly Podgoretsky ©   (2009-07-09 12:35) [9]

> Dennis I. Komarov  (09.07.2009 09:42:06)  [6]

Надеется, что там меньше вероятность, что его пакость обнаружат.



Страницы: 1 вся ветка

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-1212847400
Alik
2008-06-07 18:03
2009.09.13
Свойства Pen.Style при прорисовке контура методом Polyline


15-1247270707
KilkennyCat
2009-07-11 04:05
2009.09.13
Возможно, не будет работать до понедельника pda.delphimaster.net


15-1247661732
Claimman
2009-07-15 16:42
2009.09.13
AutoSchema - что это?


2-1247062851
mr1Andersen
2009-07-08 18:20
2009.09.13
Как программно (Delphi 7), изменить значения «Свойства папки», на


3-1227089155
Sesh
2008-11-19 13:05
2009.09.13
OracleLob сохранить в текстовый файл