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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2007, 07:28   #1
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Смех Автоматическое обновление программы

Как организовать обновление программы, что бы программа проверяла обновление - на сайте или из сети из папки (не суть важно откуда). и автоматом грузилась
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 16.11.2007, 07:54   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

1. Есть спецальные сторонние компоненты которые занимаются именно автоматическим обновлением.
2. Пишешь отдельный проект автообновления, задача которого просто заменять существующие файлы твой программы новыми откуда бы то нибыло (Lan,Http,Ftp). В самой же программе маленькая процедурка, которая проверяет текущую версию программы и версию на сервере. Последнее можно организовать разными способами ( зависит лишь от твой фантазии). Можно, кпримеру, в папку в сети (или еще где бы нибыло), где будет лежать твоя "новая версия" положить какой- нибудь файлик, в котором будет храниться просто некое число. Твоя процедурка должна при запуске прогрммы "прочитать" это число из того файлика и сравнить с числом (нус кажем хранящимся в реестре), относящимся к текущей версии программы и на основе сравнения сделать выводы о необходимости или не необходимости апдейта. Если вывод положительный, то процедурка запускает "апдейтер" и закрывает главное приложение.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 17.11.2007, 01:41   #3
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
Радость

Или же непосредственно из самой программы
Код:
function GetVersion: integer; stdcall;
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 20.11.2007, 07:57   #4
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Радость

Цитата:
Сообщение от OrdJONY Посмотреть сообщение
Или же непосредственно из самой программы
Код:
function GetVersion: integer; stdcall;
А эту функцию, откуда вызывать? Я понимаю что она внешняя и судя по всему должна находится в dll. По моему лучше в текстовый файл написать версию и все. Как сделаю - выложу исходники. может еще что нибудь поправить нужно будет.
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 20.11.2007, 13:39   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Код:
function GetVersion: string;
 var
   VerInfoSize: DWORD;
   VerInfo: Pointer;
   VerValueSize: DWORD;
   VerValue: PVSFixedFileInfo;
   Dummy: DWORD;
 begin
   VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
   GetMem(VerInfo, VerInfoSize);
   GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
   VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
   with VerValue^ do
   begin
     Result := IntToStr(dwFileVersionMS shr 16);
     Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
     Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
     Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
   end;
   FreeMem(VerInfo, VerInfoSize);
 end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось dr.Chas; 16.07.2011 в 16:45.
Квэнди вне форума Ответить с цитированием
Старый 15.03.2008, 19:34   #6
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

как ни меняю версию, а GetVersion выдает одно и то же число
andrey4623 вне форума Ответить с цитированием
Старый 16.03.2008, 04:04   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Во избежание лишней путаницы не стоит называть функцию "GetVersion", поскольку уже существует функция Windows с таким именем, возвращающая версию ОС.
B_N вне форума Ответить с цитированием
Старый 14.07.2011, 04:57   #8
SKS
Форумчанин
 
Аватар для SKS
 
Регистрация: 05.01.2009
Сообщений: 242
По умолчанию

Всем привет!
Недавно я столкнулся с проблемой обновления программы и нашел ответ.
1. Зарегистрировал сайт (любой с поддержкой ФТП), сайт делал для того чтобы вылаживать только свои программы. Если тупо для обновлений программ, можно зарегиться даже на Юкозе.
В программе добавляем два компонента со вкладки INDY CLIENTS и добавляете два компонента: idFTP и idHTTP. Добавляете Label и пишите в Caption к примеру 1.0 - это версия программы. В программу добавляете кнопку и на ее действие прописываете:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
v:string;
begin
v:=HTTP.Get('http://адрес вашего сайта/update/version.txt');
if v=version.Caption then
showmessage('Вы используете последнюю версию программы!')
else
begin
ftp.Connect(true);
if ftp.connected then
begin
ftp.ChangeDir('update');
ftp.Get('Project.exe',extractfilepath(application.ExeName)+'\project.exe',true);
end;
ftp.Disconnect;
showmessage('ok');
end;

end;

end.
Как видно из кода, на ФТП сервере вашего сайта в корне создаем папку с именем update, далее в данную папку заливаем текстовый документ с именем version, в документ текстовый записать версию программы на ФТП (допустим 1.1). И заливаем файл обновленной версии на ФТП с именем project.

Чуть не забыл компонент idFTP надо настроить, указать логин пароль и адрес ФТП сервера.
SKS вне форума Ответить с цитированием
Старый 14.07.2011, 08:12   #9
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Опасность такого метода в том, что в программе хранятся, а затем при запросе передаются логин и пароль FTP. Недоброжелатель может зайти на FTP и удалить/залить/заменить ваши файлы.
Тут лучше использовать просто закачку по прямой ссылке
Voody вне форума Ответить с цитированием
Старый 14.07.2011, 08:45   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Менять версию программы, без ведома пользователя, это жестоко, не демократично и не правомерно.
Пользователь сам должен согласиться с тем, нужно ли ему обновление или нет.
Вы помещаете на сервере махонький текстовый файлик с описанием улучшений в программе. При заходе в инет, программа считывает этот файлик и в первой строке, проверяет версии на совпадение. Если версии не совпадают, формируется надпись с предложением о замене версий и прямая ссылка на скачивание (обновление DLL и т.д.).
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое уничтожение объекта mutabor Общие вопросы Delphi 6 25.06.2008 22:25
обновление моей программы andrey4623 Общие вопросы Delphi 1 15.03.2008 13:15
Автоматическое перенаправление на др. стр. Рустам PHP 2 17.11.2007 15:43
Автоматическое перемещение Kirik JavaScript, Ajax 4 16.11.2007 17:42
Автоматическое сохранение AndreichSB Microsoft Office Access 1 03.01.2007 23:15