Модератор: Модераторы
McLion писал(а):Моя программа скачивает txt-файл в которой стоит номер новой версии.
Если номер больше того номера, что в программе -> тогда высвечиваю иконочку, что на сайте доступна новая версия или кликнув на эту самую иконку можно напрямую скачать файл.
Если номер равен или меньше того, что в файле, ничего не делаю.
В txt-файл можно конечно и написать, что изменилось в новой версии, и выдавать этот текст.
На первое время пойдет, со временем что то поудобнее придумаю.
Ichthyander писал(а):Программа платная и нужно сделать так, чтобы ссылка для скачивания не попала в паблик. Возможно придется делать эту ссылку динамической, путь к которой будет шифроваться на стороне сервере и по аналогичному алгоритму программа бы определяла этот путь динамически.
procedure Tloginform.FormShow(Sender: TObject);
var
res: Boolean;
iLDate, iRDate: TDateTime;
begin
//--!!!!!!!!! AUTO UPDATE PROGRAMM !!!!!!!!!!! ////////
iLDate:=FileDateToDateTime(FileAge(Application.ExeName));
if not FileExists('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)) then exit;
iRDate:=FileDateToDateTime(FileAge('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)));
if iLDate >= iRDate then exit else Application.MessageBox(' Обнаружена НОВАЯ версия программы !'+ #13#13 +
' Нажмите ОК для обновления ...'+ #13#13 +
' И ПЕРЕЗАПУСТИТЕ ПРОГРАММУ '+ #13#13 ,
' Обновление программы мониторинга...',mb_IconExclamation + mb_OK);
// Удаляет файл созданный в предыдущем сеансе
res := DeleteFile(Application.ExeName + '.bak'); //TRUE
// Сам себя удалить не может!
//////////////// res := DeleteFile(Application.ExeName); //FALSE
// Переименование запущенного ехе-шника
MoveFile(PChar(Application.ExeName),PChar(Application.ExeName + '.bak')); // TRUE
// НЕ Удаляет файл созданный в текущем сеансе
res := DeleteFile(Application.ExeName + '.bak'); //FALSE
// Копирование вак-файла на место и с именем текущего запущенного ехе-шника
CopyFile(PChar('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)),PChar(Application.ExeName),True); // TRUE
// Запуск нового ехе-шника (старый [текущий] еще активный)
WinExec(PChar(Application.ExeName), SW_SHOW); // TRUE
// Закрывает текущий сеанс (программу).
Close;
//----------------------------------------------------
end;
Sharfik писал(а):Ichthyander писал(а):Программа платная и нужно сделать так, чтобы ссылка для скачивания не попала в паблик. Возможно придется делать эту ссылку динамической, путь к которой будет шифроваться на стороне сервере и по аналогичному алгоритму программа бы определяла этот путь динамически.
А почему нельзя сделать две ссылки? Одна для скачивания полной платной программы, а вторая только для скачивания обновлений, в наборе которых будет отсутствовать что то типа библиотеки авторизации или т.п.
Little_Roo писал(а):Вот у меня (подсмотрел где-то...уже не помню, но работает)
- Код: Выделить всё
procedure Tloginform.FormShow(Sender: TObject);
var
res: Boolean;
iLDate, iRDate: TDateTime;
begin
//--!!!!!!!!! AUTO UPDATE PROGRAMM !!!!!!!!!!! ////////
iLDate:=FileDateToDateTime(FileAge(Application.ExeName));
if not FileExists('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)) then exit;
iRDate:=FileDateToDateTime(FileAge('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)));
if iLDate >= iRDate then exit else Application.MessageBox(' Обнаружена НОВАЯ версия программы !'+ #13#13 +
' Нажмите ОК для обновления ...'+ #13#13 +
' И ПЕРЕЗАПУСТИТЕ ПРОГРАММУ '+ #13#13 ,
' Обновление программы мониторинга...',mb_IconExclamation + mb_OK);
// Удаляет файл созданный в предыдущем сеансе
res := DeleteFile(Application.ExeName + '.bak'); //TRUE
// Сам себя удалить не может!
//////////////// res := DeleteFile(Application.ExeName); //FALSE
// Переименование запущенного ехе-шника
MoveFile(PChar(Application.ExeName),PChar(Application.ExeName + '.bak')); // TRUE
// НЕ Удаляет файл созданный в текущем сеансе
res := DeleteFile(Application.ExeName + '.bak'); //FALSE
// Копирование вак-файла на место и с именем текущего запущенного ехе-шника
CopyFile(PChar('\\192.168.18.95\ExeLib\'+ ExtractFileName(Application.ExeName)),PChar(Application.ExeName),True); // TRUE
// Запуск нового ехе-шника (старый [текущий] еще активный)
WinExec(PChar(Application.ExeName), SW_SHOW); // TRUE
// Закрывает текущий сеанс (программу).
Close;
//----------------------------------------------------
end;
Проверка не по номеру версии , а времени компиляции
Lazarus 1.5 rUnknown FPC 3.1.1 i386-win32-win32/win64
WinXP SP3 32 bit
PapaNT писал(а):Господа, вы не забыли о том, что по нормам безопасности пользователь не должен иметь прав на запись к программам?
Sharfik писал(а):Проверка прав администратора и проблемы нет, нет?)
PapaNT писал(а):Господа, вы не забыли о том, что по нормам безопасности пользователь не должен иметь прав на запись к программам?
vitaly_l писал(а): код будет работать только если программа установлена в "свободную от прав" директорию (только для Win)
vitaly_l писал(а):Рекомендую решать поставленную задачу, обыкновенным батником
Alex2013 писал(а):достаточно упрятать часть кода в скрипты
Alex2013 писал(а):проблемы с правами доступа сразу станут совершенно неактуальны
Компью́терный ви́рус — вид вредоносного программного обеспечения, способного создавать копии самого себя и внедряться в код других программ, системные области памяти, загрузочные секторы, а также распространять свои копии по разнообразным каналам связи.
Даже если автор вируса не запрограммировал вредоносных эффектов, вирус может приводить к сбоям компьютера из-за ошибок, неучтённых тонкостей взаимодействия с операционной системой и другими программами. Кроме того, вирусы, как правило, занимают место на накопителях информации и потребляют некоторые другие ресурсы системы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232