Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62

Как сделать beta версию программы

15.03.2013, 16:23. Показов 4500. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу на C++Builder'е
Вопрос: "Как мне сделать типа beta версии программы с полными возможностями в течении 16 дней, а ч-з 16 дней, возможности программы ограничились к 0 и программа запросила скачать полную версию или запросить ключ для продолжения работы программы."
Вот такая задача и вопрос у меня, как его реализовать подскажите пожалуйста...
За ранее спасибо...
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 16:23
Ответы с готовыми решениями:

Как сделать демо-версию программы?
У меня вопрос возник как сделать демо-версию моей программы?

Подскажите как сделать Portable-версию программы?
Нужно сделать портативную версию проги !! Пробовал прогой VMware ThinApp Project North Star («Проект Северная звезда», в прошлом Thinstall...

Как сделать демо версию программы, имея только exe?
Есть exe файл, исходников нет, можно ли как то сделать из этой программы демо верисю. Нужно декомпилировать? или есть другие способы.

34
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
15.03.2013, 16:26
При первом запуске считывать дату и сохранять её куда-нибудь (реестр, файл настроек)
При каждом следующем запуске считывать дату и сравнивать с сохранённой. Когда разница > 16 блокировать программу, кнопки там делать неактивными, ещё что-нибудь.
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 17:01  [ТС]
mimicria
При первом запуске считывать дату и сохранять её куда-нибудь (реестр, файл настроек)
Ну допустим я понял логику...
Вот код создание файла
Code
1
2
3
4
5
6
7
if (!FileExists("!logfile.txt"))
{
TStringList * LogFile = new TStringList;
LogFile->Add("...");
LogFile->SaveToFile("!logfile.txt");
delete LogFile;
}
Получаем дату и время с помощью функции Now().
Вот нашел код +1 день
Code
1
if (Now() > TDateTime(some_ansi_string) + 1)
Что дальше делать?
Как её (дату) сохранять в файл !logfile.txt?
Как
При каждом следующем запуске считывать дату и сравнивать с сохранённой
?
Как
блокировать программу, кнопки там делать неактивными
?
1
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
15.03.2013, 17:09
Цитата Сообщение от Сергей123456 Посмотреть сообщение
Как её (дату) сохранять в файл !logfile.txt?
Если через строки с вашим кодом, то так:
C++
1
LogFile->Add(DateTimeToStr(Now()));
Цитата Сообщение от Сергей123456 Посмотреть сообщение
Как При каждом следующем запуске считывать дату и сравнивать с сохранённой
Считывать аналогично LoadFromFile. Сравнивать <,>
Цитата Сообщение от Сергей123456 Посмотреть сообщение
Как блокировать программу, кнопки там делать неактивными
Например
C++
1
Button1->Enabled=false;
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 17:32  [ТС]
Так файл создается и дата записывается, но ода записывается однократно.
Хочу добавить еще дату в файл с помощью кода:
Code
1
if (Now() > TDateTime(some_ansi_string) + 1)
Но выдает ошибку...
Можно показать кодом как при каждом следующем запуске считывать дату и сравнивать с сохранённой
Считывать аналогично LoadFromFile. Сравнивать <,>
я просто сколько пересмотрел инфы что у меня мозг рвется...
Выкладываю свой исходник(по этой теме)
Если можно помогите мне что бы я не задавал лишних вопросов)
Миниатюры
Как сделать beta версию программы  
Вложения
Тип файла: 7z beta версия.7z (1,013.0 Кб, 4 просмотров)
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 17:36
Сергей123456, для сравнения даты есть функция: CompareDate(date1, date2), которая возвращает:
C++
1
2
3
4
5
6
7
srav = CompareDate(a1,a2);
 if (srav==LessThanValue)// или -1
  ShowMessage("1 < 2");
 else if (srav==GreaterThanValue)// или 1
  ShowMessage("1 > 2");
 else // или 0
  ShowMessage("1 = 2");
Добавлено через 1 минуту
Для подключения этой функции вставляется: <Dateutils.hpp>.
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 18:07  [ТС]
Graf_N, можно мне рабочий код который при запуске считывает дату и сохранять её
Вот код который считывает дату и сохранять её
Code
1
LogFile->Add(DateTimeToStr(Now()));
Но он только записывает 1 раз а мне нужно что бы запись шла в течении 16 дней, а ч-з 16 дней программа блоконулась и появилось сообщение "тратата" и при каждом последующем запуске было это сообщение)
Что (какой код) нужно добавить в проект?
Помогите мне, а то с каждым ответом у меня еще больше вопросов(

Добавлено через 7 минут
Ооо А можно как то записать в файл дату первого запуска программы, а потом поставить таймер для отсчета 16 дней
Идея появилась, а как осуществить не знаю(
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
15.03.2013, 18:09
Цитата Сообщение от Сергей123456 Посмотреть сообщение
а мне нужно что бы запись шла в течении 16 дней
Зачем? Записать надо 1 раз при первом запуске. А потом сравнивать с этой записью
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 18:21
Сергей123456, если твоя программа будет не выключатся, то да, ставь таймер, по секундный) Каждуй секунду получай дату и сравнивай ее с той, что при начальном запуске была, при первом запуске делаешь код примерно так:
Проверка, есть ли файл с датой, если есть, то переходим на сравнение, если нету, то создаем и отмеряем от него дату.
Твоя задача легко реализуется, только подумай чуть чуть и готово, если тебе не понятен принцип таймера, то объясняю, он каждый определенный интервал времени выполняет какое то действие, которое прописано в он таймер, таймер запущен, когда его свойство энабл = тру.
По поводу того, чтобы дата каждый раз не перезаписывалась, я тебе выше написал как, можно конечно и иначе, сначала загружаешь файл в переменную, если в ней пусто, то сохраняешь в файл дату запуска программы, а дальше сравниваешь по той функции что я тебе описал.
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 18:23  [ТС]
mimicria, прошу извинения)) Не знал...
Значит записываем 1 раз, а потом сверяем дату с текущей датой...?
А как же сделать это сравнение? (на 16 дней)
Graf_N, программа, а также комп будет выключатся...
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.03.2013, 18:30
Самый правильный вариант
DateTimeCompare (C++)

Добавлено через 1 минуту
Цитата Сообщение от Сергей123456 Посмотреть сообщение
а также комп будет выключатся
а вот это уже, как минимум, плохой вкус - окончание пробного периода для вашей программы не должно вредить пользователю. Будете дальше обсуждать зловред - тема будет закрыта.
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 18:36
Сергей123456,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
signed char sr;
bool prov=false;
TStringList * LogFile = new TStringList;
try
{
LogFile->LoadFromFile(!logfile.txt)
prov=true;
}
catch(...)
{
LogFile->Add(Date());
LogFile->SaveToFile("!logfile.txt");
prov=false;
}
if(prov==true)
{
sr=CompareDate(Date(), LogFile->String[0]+16)
   if(sr==1)//Если сегодняшнее число больше, чем то что получено из лог + 16 дней, то программа закрывается
   ShowMessage("Извините, срок использования ПО истек.");
   Form1->Close();
}
delete LogFile;
0
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
15.03.2013, 19:52
В книге "Borland C++ 5 для себя" говорится как создать beta версию программы, а также как свою зашиту сломать.
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 22:08  [ТС]
LK,
а вот это уже, как минимум, плохой вкус - окончание пробного периода для вашей программы не должно вредить пользователю. Будете дальше обсуждать зловред - тема будет закрыта.
Вы не правильно поняли) Комп выключает скам пользователь (как обычно) программа комп не выключает..._
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 22:18  [ТС]
Graf_N, не работает(
Выдает ошибки в "красных" строках см картинку...
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include "DateUtils.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
TDateTime dt;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
{
if (Now() > TDateTime() + 1)
if (!FileExists("!logfile.txt"))
        {
        TStringList * LogFile = new TStringList;
        LogFile->Add(DateTimeToStr(Now()));
        LogFile->SaveToFile("!logfile.txt");
        delete LogFile;
        }
}
signed char sr;
bool prov=false;
TStringList * LogFile = new TStringList;
try
{
LogFile->LoadFromFile(!logfile.txt)
prov=true;
}
catch(...)
{
LogFile->Add(Date());
LogFile->SaveToFile("!logfile.txt");
prov=false;
}
if(prov==true)
{
sr=CompareDate(Date(), LogFile->String[0]+16)
   if(sr==1)//Åñëè ñåãîäíÿøíåå ÷èñëî áîëüøå, ÷åì òî ÷òî ïîëó÷åíî èç ëîã + 16 äíåé, òî ïðîãðàììà çàêðûâàåòñÿ
   ShowMessage("Èçâèíèòå, ñðîê èñïîëüçîâàíèÿ ÏÎ èñòåê.");
   Form1->Close();
}
delete LogFile;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
 dt = Now();
 Edit1->Text = DateToStr(dt);
}
//---------------------------------------------------------------------------
Миниатюры
Как сделать beta версию программы  
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 22:40
Сергей123456, В основном, это из за того, что я писал тут, не в билдере, потому зачастую забываю ; а ты с меня скопипастил и не удосужился понять суть ошибок, ну ладно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <vcl.h>
#pragma hdrstop
#include "DateUtils.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
TDateTime dt;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
{
if (Now() > TDateTime() + 1)
if (!FileExists("!logfile.txt"))
        {
        TStringList * LogFile = new TStringList;
        LogFile->Add(DateTimeToStr(Now()));
        LogFile->SaveToFile("!logfile.txt");
        delete LogFile;
        }
}
signed char sr;
bool prov=false;
TStringList * LogFile = new TStringList;
try
{
LogFile->LoadFromFile(!logfile.txt);//Тут надо ;
prov=true;
}
catch(...)
{
LogFile->Add(Date());
LogFile->SaveToFile("!logfile.txt");
prov=false;
}
if(prov==true)
{
sr=CompareDate(Date(), LogFile->String[0]+16);//Тут надо ;
   if(sr==1)//Если сегодняшнее число больше, чем то что получено из лог + 16 дней, то программа закрывается
   ShowMessage("Извините, срок использования ПО истек.");
   Form1->Close();
}
delete LogFile;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
 dt = Now();
 Edit1->Text = DateToStr(dt);
}
Проверь, если я правильно понял, вроде должны быть еще ошибки, если нет, то впредь следи за Точкой с запятой!

Добавлено через 2 минуты
И еще кое что, Что это?
C++
1
if (Now() > TDateTime() + 1)
???

Добавлено через 2 минуты
Тебе TStringList * LogFile = new TStringList; надо до этого всего сделать, а не в нем!
C++
1
2
3
4
5
6
7
8
if (Now() > TDateTime() + 1)
if (!FileExists("!logfile.txt"))
        {
        TStringList * LogFile = new TStringList;
        LogFile->Add(DateTimeToStr(Now()));
        LogFile->SaveToFile("!logfile.txt");
        delete LogFile;
        }
Добавлено через 1 минуту
Хотя нет, тебе лучше 1 раз сделать TStringList * LogFile = new TStringList; Там же где ты объявил dt и не делать больше)
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 22:40  [ТС]
Graf_N,
а ты с меня скопипастил и не удосужился понять суть ошибок, ну ладно:
Нет, просто я уже целый день за компом, перечитал много инфы и у меня уже усталось берет, вот и решил спросить тут
Без обид...)
Вот попробовал и все же 2 ошибки(
[C++ Error] Unit1.cpp(32): E2451 Undefined symbol 'logfile'
[C++ Error] Unit1.cpp(43): E2316 'String' is not a member of 'TStringList'
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 22:45
А вот тут я забыл фигурные скобки, а ты не посмотрел:
C++
1
2
3
4
5
if(sr==1)//Если сегодняшнее число больше, чем то что получено из лог + 16 дней, то программа закрывается
{   
ShowMessage("Извините, срок использования ПО истек.");
   Form1->Close();
}
Добавлено через 1 минуту
Сергей123456, Я ни на кого не обижаюсь) Стараюсь помочь по мере знаний) Ну если они хоть какие то у людей есть) При сравнении дат <>= не пойдут! Там нужно именно использовать компарейтдат, которая может вернуть три значения, я выше это описывал, это я к тому, что у тебя стоит:
C++
1
if (Now() > TDateTime() + 1)
Добавлено через 1 минуту
Сергей123456, ладно, ты пока глянь, что я наисправлял, напиши, как чего, а я пока запущу билдер, да сам попробую.
0
4 / 4 / 0
Регистрация: 06.02.2012
Сообщений: 62
15.03.2013, 22:45  [ТС]
И еще кое что, Что это?
Code
1
if (Now() > TDateTime() + 1)
Тип как код на добавления в !logfile.txt + 1 дня... // Ну он не работает или я тупой
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
15.03.2013, 22:49
Сергей123456, Читай выше)

Добавлено через 3 минуты
Сергей123456, Кстати а зачем еще одна фигурная скобка, вот в этом месте:
C++
1
2
3
4
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
{
Убери ее!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2013, 22:49
Помогаю со студенческими работами здесь

Как сделать "демо"-версию программы?
Всем привет! Ребят, помогите разобраться немного. Погуглил на сайте, но так и не понял ничего. Как сделать &quot;демо&quot;-версию...

Как получить версию программы?
Добрый день. Каким образом узнать версию проекта, для вывода ее в форме about...? Галочка &quot;Include version information in...

Как показать версию другой программы
Как показать версию файла другого ***.exe приложения в моей программе?

Как получить версию вызываемой программы?
Допустим, из своей программы запускаю какой-нибудь ехе-шник. Как у него прочитать версию? (желательно, MASM)

Как создать триал версию программы?
Как создать триал версию программы? например, срок действия триала 30 дней, после этого срока чтобы программа не запускалась либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru