Topic: Удаление значения реестра
Как сделать чтобы при нажатии кнопки из реестра удалилась ключь?
My Visual Database → Russian → Удаление значения реестра
Как сделать чтобы при нажатии кнопки из реестра удалилась ключь?
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;
Сделал так, как сказано выше, но работать не хочет.
Скрипт такой:
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;
Первая процедура работает (запись в реестр) , вторая (удаление этой записи) нет. После нажатия на кнопку ничего не происходит. На приложенном рисунке - запись в реестре после нажатия на кнопкую
в скрипте не указан правильный ключ для удаления
reg.DeleteValue('VALUE');
попробуйте
reg.DeleteValue('StartDate');
Это сработало. Ключ удалился. Но папка проекта 'software\MyAssistentDemoVersion' не удалилась.
Это сработало. Ключ удалился. Но папка проекта 'software\MyAssistentDemoVersion' не удалилась.
reg.DeleteKey('software\MyAssistentDemoVersion');
И всё же никак не справлюсь, хотя вроде-бы всё правильно
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;
Прошу помощи зала! Проект прилагается.
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;
Проверил ваш проект, работает, ключ удаляется
Кнопка - это резервный инструмент на период отладки. Её в проекте не будет. Работать должно это:
////////// ЗАПИСЬ СТАРТОВОЙ ДАТЫ В РЕЕСТР ////////////////////////////
if frmMain.Edit4.Text <> frmMain.Edit2.Text then
и это:
//////////// УДАЛЕНИЕ ЗАПИСИ В РЕЕСТРЕ /////////////////////////////
if frmMain.Edit4.Text = frmMain.Edit2.Text then
Сейчас у меня ключи в таблице отсутствуют, т.е. проект не зарегистрирован, но при запуске TRIAL не прописывается и нет предупреждения о 30 днях (у Вас при запуске оно тоже должно быть).
к сожалению я не совсем понимаю, что вы делаете, я могу вам помочь только с конкретным вопросом.
к сожалению я не совсем понимаю, что вы делаете, я могу вам помочь только с конкретным вопросом.
Хочу, чтобы при отсутствии в таблице лицензионного ключа проект был TRIAL, а после записи ключа (в Edit4 он попадает автоматически из таблицы) это ограничение снималось (не кнопкой!). И чтобы это работало безотказно. Условия записи стартовой даты в реестр и её удаления показаны выше. Пока же этого не происходит. Проект выложен ранее. Нагляднее - смотрите приложенный рисунок.
Вопрос снят. Решено. Ошибка была в том, что в procedure frmMain_OnShow вначале нужно запустить формирование серийного номера и кода активации, а уже затем запускать проверку стартовой даты в реестре. У меня же было наоборот.
Можете оставить свой проект для примера?
Можете оставить свой проект для примера?
http://myvisualdatabase.com/forum/misc. … download=1
My Visual Database → Russian → Удаление значения реестра
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi