Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 22:19   #1
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию Работа с триалом в реестре

Привет, всем. Пишу свою программу и создал модуль с функциями для триала в реестре(Windows ). Вот код как я его успользовал:
Код:
var //раздел где переменые глобальны
Trial: TRegTrial; //переменая с моим форматом(в uses RegTrial- мой модуль). 

...//процедура создания первой формы
..//код
Trial:= TRegTrial.Create;//создаем элемент триала
if Trial.RegistertEx('h_c_u','MusicPlayer')=false then //если регистрация ещё не прошла то...
begin
Trial.Init('h_c_u','MusicPlayer');  //иницилизация(создание ключа)
Trial.Registrator(datetostr(date),false);  //регистрация
Form2.Label3.Caption:='Дата первого запуска: ' + Trial.ReadDate; //узнаем дату из реестра
a:=datetostr(date); //узнаем текущую дату
a1:=Date + 30; //создаем переменую триала
a2:=strtodate(Trial.ReadCloseDate('Конечная дата')) - date; //узнаем остаток дней
Trial.WriteCloseDate('Конечная дата',datetostr(a1)); //записываем конечную дату
Form2.Label5.Caption:='Конечная дата:' + Trial.ReadCloseDate('Конечная дата'); //показываем конечную дату
Form2.Label6.Caption:='Осталось дней: ' + datetostr(a2) + ' дней'; //показываем сколько осталось дней
end
else //иначе
begin //прошла регистрация
Trial.Init('h_c_u','MusicPlayer');   //снова иницилизируем
Form2.Label3.Caption:='Дата первого запуска: ' + Trial.ReadDate; //показываем дату из реестра
a1:=strtodate(Trial.ReadCloseDate('Конечная дата')); //узнаем конечную дату
a2:=a1 - date; //узнаем сколько осталось
Form2.Label5.Caption:='Конечная дата: ' + Trial.ReadCloseDate('Конечная дата'); //показываем конечную дату
Form2.Label6.Caption:='Осталось дней: ' + datetostr(a2); //показываем сколько осталось дней
if (date=a1) and (Trial.ActivationExists=false) then //узнаем активирована ли программа и кончился ли срок
begin
MessageBox(0, PChar('Истек срок активации! Активируйте программу!'), PChar('Внимание'), 0); //сообщение
Form2.Show; //форма активации
end;

if Trial.ActivationExists=false then  //узнаем активирована ли программа
Form2.Label4.Caption:='Cтатус: Неактивировано' //если нет то пишим это
else
Form2.Label4.Caption:='Статус: Активировано';  //иначе это
end;


... //процедура OnDestroy у формы
..//код
Trial.Free;
Trial.Destroy;
это одна форма, в ней просто всё регается. На второй форме активируется:
Код:
var //глобал.
T: TRegTrial; //модуль прописал

procedure TForm2.FormDestroy(Sender: TObject);
begin
T.Free;
T.Destroy;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
a: String;
begin
T.Init('h_c_u', 'MusicPlayer'); //иницилизация
if T.RegistertEx('h_c_u', 'MusicPlayer')=false then //проверка регистрации
begin
ShowMessage('Данная программа ещё не зарегестрирована');
exit;
end;
if T.ActivationExists=true then //проверка на то активирована ли программа
begin
ShowMessage('Программа уже активирована');
exit;
end
else
begin
a:=edit1.Text;
if a='' then
begin
ShowMessage('Введите код активации');
exit;
end;

if (a='H196-GT77RE-FY486-9TRE') or (a='GTEE-FT47TH-FW647-7EFG') or (a='KTRE-TY754-RV386-3VT9') then
begin
T.Activater(true); //активации
ShowMessage('Программа активирована');
Trial.Free;
end
else
ShowMessage('Введен неверный код активации');
end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
T:= TRegTrial.Create;
end;
Компилятор ошибок не дает, а вот после запуска программы:
Project MusicPlayer.exe raised exception class EAccessViolation with message 'Access violation at address 004313AE in module 'MusicPlayer.exe'. Read of address 00000008'...
Говорит, что какая-то ошибка в модуле программы по адресу 004313AE. При чтение адресса 00000008. Что делать?
Ссылается сюда:
Код:
program MusicPlayer;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit2 in 'Unit2.pas' {Form2},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  Unit8 in 'Unit8.pas' {Form8},
  Unit9 in 'Unit9.pas' {Form9},
  Unit10 in 'Unit10.pas' {Form10},
  Unit11 in 'Unit11.pas' {Form11};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2); //сюда
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm8, Form8);
  Application.CreateForm(TForm9, Form9);
  Application.CreateForm(TForm10, Form10);
  Application.CreateForm(TForm11, Form11);
  Application.Run;
end.
Но я честно думаю, что ошибка происходит где-то в последнем действие при старте первой формы. Подскажите как исправить?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 03.11.2012, 23:31   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Что делать?
Ловить ошибку за хвост, что еще? F7 и F8 тебе в помощь - найдешь строчку, где эта ошибка выскакивает, её сюда и присылай.

А вообще - все эти коды активации в откомпилированном exe-шнике будут прямым текстом лежать. Без шифрования/дешифрования тут не обойтись.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.11.2012, 13:11   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Да вот проблема в том, что может что-то я упустил. Всё исправил, но всё равно ошибка. Ведь он пишит ошибку алгометрическую, а не синтаксическую. И ссылается на это:
Код:
Trial:= TRegTrial.Create;
if Trial.RegistertEx('h_c_u','MusicPlayer')=false then 
begin
Trial.Init('h_c_u','MusicPlayer'); 
Trial.Registrator(datetostr(date), 'Индефикатор',false);  
Form2.Label3.Caption:='Дата первого запуска: ' + Trial.ReadDate; 
a:=datetostr(date);
a1:=Date + 30; 
a2:=strtodate(Trial.ReadCloseDate('Конечная дата')) - date; 
Trial.WriteCloseDate('Конечная дата',datetostr(a1)); 
Form2.Label5.Caption:='Конечная дата:' + Trial.ReadCloseDate('Конечная дата');
Form2.Label6.Caption:='Осталось дней: ' + datetostr(a2) + ' дней';
end
else 
begin 
Trial.Init('h_c_u','MusicPlayer');   
Form2.Label3.Caption:='Дата первого запуска: ' + Trial.ReadDate; 
a1:=strtodate(Trial.ReadCloseDate('Конечная дата')); 
a2:=a1 - date; 
Form2.Label5.Caption:='Конечная дата: ' + Trial.ReadCloseDate('Конечная дата');
Form2.Label6.Caption:='Осталось дней: ' + datetostr(a2) + ' дней';
if (date=a1) and (Trial.ActivationExists('Индефикатор')=false) then
begin
ShowMessage('Внимание! Истек срок активации! Активируйте программу');
Form2.Show; 
end;

if Trial.ActivationExists('Индефикатор')=false then  
Form2.Label4.Caption:='Статус: Неактивировано' 
else
Form2.Label4.Caption:='Статус: Активировано'; 
end;
Trial.Free;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 04.11.2012, 14:21   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Странная защита. Даже школьник взломает за 1 минуту с помощью Regmon-а. Как-то здесь на форуме правильно писали: "Нужно удостоиться большой чести, чтобы вашу программу взломали. Если взломали - значит вы написали что-то стоящее".

ps. Не поверю, что в этом месте не вылетает ошибка
Код:
procedure TForm2.FormDestroy(Sender: TObject);
begin
T.Free;
T.Destroy;
end;
Нельзя уничтожить объект два раза.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные в реестре KoBRaAndrey Общие вопросы Delphi 4 01.10.2009 20:36
поиск в реестре Flippp Общие вопросы C/C++ 3 04.08.2009 09:26
Путь в реестре artemavd Общие вопросы Delphi 2 05.06.2009 19:36
Условие в реестре ... KVANTOM Общие вопросы Delphi 2 15.01.2009 04:33
Поиск в реестре :( CrazyProgramer Общие вопросы Delphi 2 28.08.2008 01:43