Topic: Удаление значения реестра

Как сделать чтобы при нажатии кнопки из реестра удалилась ключь?

Re: Удаление значения реестра

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\KEY',true);

     reg.DeleteValue('VALUE');

     reg.CloseKey;
     reg.Free;
end;
Dmitry.

Re: Удаление значения реестра

Сделал так, как сказано выше, но работать не хочет.
Скрипт такой:

procedure frmMain_OnShow (Sender: string; Action: string);
var
    reg: TRegistry;
    iDays: integer;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\MyAssistentDemoVersion',true);
     if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+30); // триал период 30 дней

     iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days

     reg.CloseKey;
     reg.Free;

     if iDays < 1 then
     begin
          if MessageDlg('Пробный период закончился.'+#13+'Вы хотите приобрести лицензию?', mtInformation, mbYes+mbNo, 0) = mrYes
              then frmRegistration.Show;

          frmLogin.btnEntry.Enabled := False;
     end;

     if MessageDlg('Демонстрационная версия. Осталось: ' + IntToStr(iDays) +' дней.'+#13+'Вы хотите приобрести лицензию?', mtInformation, mbYes+mbNo, 0) = mrYes
         then frmRegistration.Show;
end;




procedure frmMain_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\MyAssistentDemoVersion',true);

     reg.DeleteValue('VALUE');

     reg.CloseKey;
     reg.Free;
end;

Первая процедура работает (запись в реестр) , вторая (удаление этой записи) нет. После нажатия на кнопку ничего не происходит. На приложенном рисунке - запись в реестре после нажатия на кнопкую

Post's attachments

Attachment icon 2015-07-02_160431.jpg 69.41 kb, 284 downloads since 2015-07-02 

Не боги горшки лепят!

Re: Удаление значения реестра

в скрипте не указан правильный ключ для удаления

reg.DeleteValue('VALUE');

попробуйте

reg.DeleteValue('StartDate');
Dmitry.

Re: Удаление значения реестра

Это сработало. Ключ удалился. Но папка проекта 'software\MyAssistentDemoVersion' не удалилась.

Не боги горшки лепят!

Re: Удаление значения реестра

kunar80 wrote:

Это сработало. Ключ удалился. Но папка проекта 'software\MyAssistentDemoVersion' не удалилась.

reg.DeleteKey('software\MyAssistentDemoVersion');
Dmitry.

7 (edited by kunar80 2015-07-03 14:08:26)

Re: Удаление значения реестра

И всё же никак не справлюсь, хотя вроде-бы всё правильно

procedure frmMain_OnShow (Sender: string; Action: string);
    var
    reg: TRegistry;
    iDays: integer;

    begin
////////// ЗАПИСЬ СТАРТОВОЙ ДАТЫ В РЕЕСТР ////////////////////////////

        if frmMain.Edit4.Text <> frmMain.Edit2.Text then
        begin
             reg := TRegistry.Create;
             reg.Access := KEY_ALL_ACCESS;
             reg.RootKey := HKEY_CURRENT_USER;
             reg.OpenKey('software\MyAssistantTrial',true);
             if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+30); // триал период 30 дней

             iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days

             reg.CloseKey;
             reg.Free;

             if iDays < 1 then
                 begin
                  if MessageDlg('Пробный период закончился.'+#13+'Вы хотите приобрести лицензию?', mtInformation, mbYes+mbNo, 0) = mrYes
                  then frmRegistration.Show;

                  frmLogin.btnEntry.Enabled := False;
                 end;

             if MessageDlg('Демонстрационная версия. Осталось: ' + IntToStr(iDays) +' дней.'+#13+'Вы хотите приобрести лицензию?', mtInformation, mbYes+mbNo, 0) = mrYes
             then frmRegistration.Show;
        end;

//////////// УДАЛЕНИЕ ЗАПИСИ В РЕЕСТРЕ /////////////////////////////

        if frmMain.Edit4.Text = frmMain.Edit2.Text then
        begin
             reg := TRegistry.Create;
             reg.Access := KEY_ALL_ACCESS;
             reg.RootKey := HKEY_CURRENT_USER;
             reg.OpenKey('software\MyAssistantTrial',true);

             reg.DeleteValue('StartDate');
             reg.DeleteKey('software\MyAssistantTrial');

             reg.CloseKey;
             reg.Free;
        end;

Прошу помощи зала! Проект прилагается.

Post's attachments

Attachment icon My Assistant.rar 385.16 kb, 471 downloads since 2015-07-03 

Не боги горшки лепят!

Re: Удаление значения реестра

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

procedure frmMain_Button1_OnClick (Sender: string; var Cancel: boolean);
var
reg: TRegistry;
begin
             reg := TRegistry.Create;
             reg.Access := KEY_ALL_ACCESS;
             reg.RootKey := HKEY_CURRENT_USER;
             reg.DeleteKey('\software\MyAssistantTrial');
             reg.CloseKey;
             reg.Free;
end;
Dmitry.

9 (edited by kunar80 2015-07-03 22:51:03)

Re: Удаление значения реестра

DriveSoft wrote:

Проверил ваш проект, работает, ключ удаляется

Кнопка - это резервный инструмент на период отладки. Её в проекте не будет. Работать должно это:

////////// ЗАПИСЬ СТАРТОВОЙ ДАТЫ В РЕЕСТР ////////////////////////////
        if frmMain.Edit4.Text <> frmMain.Edit2.Text then

и это:

//////////// УДАЛЕНИЕ ЗАПИСИ В РЕЕСТРЕ /////////////////////////////
        if frmMain.Edit4.Text = frmMain.Edit2.Text then

Сейчас у меня ключи в таблице отсутствуют, т.е. проект не зарегистрирован, но при запуске TRIAL не прописывается и нет предупреждения о 30 днях (у Вас при запуске оно тоже должно быть).

Post's attachments

Attachment icon My Assistant.rar 405.63 kb, 487 downloads since 2015-07-04 

Не боги горшки лепят!

Re: Удаление значения реестра

к сожалению я не совсем понимаю, что вы делаете, я могу вам помочь только с конкретным вопросом.

Dmitry.

11 (edited by kunar80 2015-07-04 14:36:38)

Re: Удаление значения реестра

DriveSoft wrote:

к сожалению я не совсем понимаю, что вы делаете, я могу вам помочь только с конкретным вопросом.

Хочу, чтобы при отсутствии в таблице лицензионного ключа проект был TRIAL, а после записи ключа (в Edit4 он попадает автоматически из таблицы) это ограничение снималось (не кнопкой!). И чтобы это работало безотказно.  Условия записи стартовой даты в реестр и её удаления показаны выше. Пока же этого не происходит. Проект выложен ранее. Нагляднее - смотрите приложенный рисунок.

Post's attachments

Attachment icon 00001.jpg 61.34 kb, 269 downloads since 2015-07-04 

Не боги горшки лепят!

12 (edited by kunar80 2015-07-05 08:34:17)

Re: Удаление значения реестра

Вопрос снят. Решено. Ошибка была в том, что в procedure frmMain_OnShow вначале нужно запустить формирование серийного номера и кода активации, а уже затем запускать проверку стартовой даты в реестре. У меня же было наоборот.

Не боги горшки лепят!

Re: Удаление значения реестра

Можете оставить свой проект для примера?

Re: Удаление значения реестра

pha1984 wrote:

Можете оставить свой проект для примера?

http://myvisualdatabase.com/forum/misc. … download=1

Не боги горшки лепят!