Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/37: Рейтинг темы: голосов - 37, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28

Обновление программы

27.03.2013, 18:37. Показов 7237. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как можно сделать обновление программы с сервера, version.tvt и .exe лежит на сервере. Какой то переменной задается версия текущей версии и сверяет из version.txt, если новее то скачивает exe с сервера и перезапускает программу. У меня получилось только такое...
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, StdCtrls;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    About1: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.N6Click(Sender: TObject);
var CanClose: boolean;
begin
 
  if Application.MessageBox('Âû äåéñòâèòåëüíî õîòèòå âûéòè?','Ïîäòâåðæäåíèå',
     MB_YESNO+MB_ICONQUESTION)= IDNO then CanClose:=True;
end;
 
procedure TForm1.N7Click(Sender: TObject);
var
HTTP:TIdHTTP;
Response:TFileStream;
s:string;
Version:TStringList;
begin
HTTP:=TIdHTTP.Create(nil);
Version:=TStringList.Create;
 try
 s:=HTTP.Get('http://sait.ru/version.txt');
 Version.LoadFromFile('version.txt');
  if Pos(s,Version.Text)<>0 then
   begin
   ShowMessage('Îáíîâëåíèé íåò, íî ñêîðî áóäåò.')
   end
  else
   begin
   ShowMessage('Îáíîâëåíèå åñòü, ñåé÷àñ áóäó çàãðóæàòü.');
   Response:=TFileStream.Create('program.rar',fmCreate);
   HTTP.Get('http://sait.ru/program.rar',Response);
   Version.Add(s);
   Version.SaveToFile('version.txt');
   end;
 finally
 HTTP.Free;
 Version.Free;
 end;
end;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2013, 18:37
Ответы с готовыми решениями:

Обновление программы
Написал код: procedure updater; var m: TMemoryStream; begin Application.ProcessMessages; form1.ProgressBar1.Position:=2; ...

Обновление программы
Как делается обновление программы? Вот стартовые параметры: Есть оболочка, при загрузке получаю с базы данных значение...

Обновление программы, версия
Ребят как можно реализовать так, чтобы рядом не было файлика типа ver.txt, а все было прямо в проге? код ниже... procedure...

16
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
27.03.2013, 18:43
При запуске приложения ищи около *.ехе файла свой program.rar, если находишь - распаковывешь+удаляешь архив, если нету архива - продолжаешь обычное создание формы

кстати Response после принятия архива нужно скинуть на диск., после скачивания необроходимо перезапустить приложение
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
27.03.2013, 18:52  [ТС]
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
При запуске приложения ищи около *.ехе файла свой program.rar, если находишь - распаковывешь+удаляешь архив, если нету архива - продолжаешь обычное создание формы

кстати Response после принятия архива нужно скинуть на диск., после скачивания необроходимо перезапустить приложение
а код можно? я в delphi только новичек...Ну да, скидывание на диск не происходило, как доделать так и непонял
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
27.03.2013, 18:59
Пользуясь гуглом набросаем процедуру перезапуска приложения
Delphi
1
2
3
4
5
6
7
8
9
procedure Reboot;
 var
   FullProgPath: PChar;
 begin
   FullProgPath := PChar(Application.ExeName);
   // ShowWindow(Form1.handle,SW_HIDE); 
  WinExec(FullProgPath, SW_SHOW); // Or better use the CreateProcess function 
  Application.Terminate; // or: Close; 
end;
теперь чуть изменим ваш код
Delphi
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, StdCtrls;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    About1: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.N6Click(Sender: TObject);
var CanClose: boolean;
begin
 
  if Application.MessageBox('Вы действительно хотите выйти?','Подтверждение',
     MB_YESNO+MB_ICONQUESTION)= IDNO then CanClose:=True;
end;
 
procedure TForm1.N7Click(Sender: TObject);
var
HTTP:TIdHTTP;
Response:TFileStream;
s:string;
Version:TStringList;
begin
HTTP:=TIdHTTP.Create(nil);
Version:=TStringList.Create;
 try
 s:=HTTP.Get('http://sait.ru/version.txt');
 Version.LoadFromFile('version.txt');
  if Pos(s,Version.Text)<>0 then
   begin
   ShowMessage('Обновлений нет, но скоро будет.')
   end
  else
   begin
   ShowMessage('Обновление есть, сейчас буду загружать.');
   Response:=TFileStream.Create('program.rar',fmCreate);
   HTTP.Get('http://sait.ru/program.rar',Response);
   // нужно сохранить архив
   TMemoryStream(Response).SaveToFile('program.rar');
   Response.Free;
   Version.Add(s);
   Version.SaveToFile('version.txt');
   end;
 finally
 HTTP.Free;
 Version.Free;
 end;
end;
end.
Для работы с архивом нужно подключить дополнительные модули, попробуйте погуглить, их несколько
Просто напомню, при запуске программы проверяйте наличие файла 'program.rar'
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
27.03.2013, 19:23  [ТС]
Теперь у меня вообще неполучается. Вы не могли бы посмотреть что я не так сделал?
Вложения
Тип файла: rar pro.rar (15.0 Кб, 35 просмотров)
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
27.03.2013, 19:54
Какая версия инди у вас?
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
27.03.2013, 22:50  [ТС]
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
Какая версия инди у вас?
незнаю, а как узнать?

Добавлено через 18 минут
Цитата Сообщение от visible Посмотреть сообщение
незнаю, а как узнать?
пробывал вот так:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function IsConnectedToInternet: Boolean; //Проверка соединения 
      var
        dwConnectionTypes: DWORD; 
      begin
        dwConnectionTypes := 
          INTERNET_CONNECTION_MODEM + 
          INTERNET_CONNECTION_LAN + 
          INTERNET_CONNECTION_PROXY; 
        Result := InternetGetConnectedState(@dwConnectionTypes, 0); 
      end;
 
function GetInetFile(const fileURL, FileName: string): boolean; //Получение файла 
 const
       BufferSize = 1024; 
 var
       hSession, hURL: HInternet; 
       Buffer: array[1..BufferSize] of Byte; 
       BufferLen: DWORD; 
       f: file; 
       sAppName: string; 
 begin
       Result := False; 
       sAppName := ExtractFileName(Application.ExeName); 
       hSession := InternetOpen(PChar(sAppName), 
       INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); 
       try
         hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0); 
         try
           AssignFile(f, FileName); 
           Rewrite(f,1); 
           repeat
             InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); 
             BlockWrite(f, Buffer, BufferLen); 
           until
             BufferLen = 0; 
           CloseFile(f); 
           Result := True; 
         finally
           InternetCloseHandle(hURL); 
         end; 
       finally
         InternetCloseHandle(hSession); 
       end; 
 end;
 
procedure TForm1.Button1Click(Sender: TObject);
 var
 s, txt: string; //Переменные
 i: integer;    //
 begin
 //Проверям есть ли соединение с интернетом?! Если есть то начинаем проверку обновления. 
 if IsConnectedToInternet then
   begin
    Memo1.Lines.Add('['+timetostr(time)+'] - Подключаемся к серверу');
    s := IdHTTP1.Get('http://yoursite.ru/project.html');  // Get запрос на страницу с информацией 
    title.Caption := Copy(s, pos('', s) + 7, pos('', s) - pos('', s) -7); //Название страницы, к примеру 
    size.Caption := Copy(s, pos('<size>', s) + 6, pos('</size>', s) - pos('<size></size>', s) -6); //Размер файла, пример: 356 KB 
    version.caption := Copy(s, pos('<version>', s) + 9, pos('</version>', s) - pos('<version>', s) -9); //Версия, я бы посоветовал вам делать так, между <version>1</version>, так намного легче. 
    link.caption := Copy(s, pos('', s) + 7, pos('', s) - pos('', s) -7); //Ссылка на  скачивание файла 
    begin //strtofloat, т.е. если Label1.Caption больше "0", то появляется окно. 
    if strtofloat(label1.caption)>0 then      
    begin
    Memo1.Lines.Add('['+timetostr(time)+'] - Доступна новая версия!');
    sleep(500); //Типо у нас прога крутая такая ждёт... 500мс :)
 if MessageDlg('Доступно новое обновление! Начать скачивание?', mtConfirmation, 
      [mbYes, mbNo],0)=mrYes 
      then //Если пользователь нажал на "Yes", то начинаем обновление.
 begin
       Memo1.Lines.Add('['+timetostr(time)+'] - Идёт скачивание обновления!');
       FileOnNet := link.caption; //Наша ссылка на  скачивание
       LocalFileName := 'Project.exe'; //Локальная директория, т.е. куда будет сохранять обновление. 
       if GetInetFile(FileOnNet, LocalFileName) = True then
       Memo1.Lines.Add('['+timetostr(time)+'] - Обновление завершилось!');
       ShowMessage('Загрузка успешнно завершина!') //Пока пользователь не нажмёт "ОК", программа не закрывается.
       ShellExecute(Handle, nil, PChar(LocalFileName), nil, nil, SW_SHOW); //И открываем скачанное обновление
       Close; //Беспощадно закрываем программу!
 else
       ShowMessage('Ощибка! Обновление не загруженно!') //Если ошибка
 end
 end
 end
 end
 end
 else //Если
       Showmessage('Соединение с интернетом отсутствует!'); //Если нет соединения с интернетом выводим это сообщение!
 // Это конец проверки соединения с интернетом. 
 end;
Ошибки
Code
1
2
3
[Hint] Unit1.pas(60): Value assigned to 'GetInetFile' never used
[Error] Unit1.pas(124): Undeclared identifier: 'title'
[Error] Unit1.pas(125): Object or class type required
Добавлено через 2 часа 30 минут
Погуглил, нашел что title size и version должны быть компонентами, отсюда и ошибка. Только таких компонентов не существует...
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
28.03.2013, 12:30
Не знаю что за код, но title size version link вроде TLabel для визуализации информации о файле и источнике (сайта)
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
28.03.2013, 20:54  [ТС]
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
Не знаю что за код, но title size version link вроде TLabel для визуализации информации о файле и источнике (сайта)
Добавил Tlabel. Ошибки такие же

Добавлено через 1 час 28 минут
сейчас качаю delphiXE2 + upd4.1. До этого был delphi 7. Попробую собрать проект на delphiXE2 + upd4.1

Добавлено через 3 часа 22 минуты
Попробывал на Delphi XE2. Неполучилось...
0
0 / 0 / 1
Регистрация: 24.03.2013
Сообщений: 29
28.03.2013, 21:00
вот, лови
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm2.btn1Click(Sender: TObject);
var
 version:WideString;
begin
   try
    version:=IdHTTP1.Get('http://delphisources.do.am/version.txt');// ваша ссылка на файл version.txt
    if version=Lbl1.Caption then
     begin
      Mmo1.Lines.Add('ништяк');
     end
    else
     begin
 Mmo1.Lines.Add('Ты юзаешь старье');
       
       
     end;
   except
    on e:Exception do
     //-//-//-//-//-//
   end;
end;
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
29.03.2013, 09:28  [ТС]
Спасибо, попробывал сделать как у вас, неполучилось, оставил так:

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
procedure TForm1.N7Click(Sender: TObject);
var
HTTP:TIdHTTP;
Response:TFileStream;
s:string;
Version:TStringList;
begin
HTTP:=TIdHTTP.Create(nil);
Version:=TStringList.Create;
 try
 s:=HTTP.Get('http://sait.ru/version.txt');
 Version.LoadFromFile('version.txt');
  if Pos(s,Version.Text)<>0 then
   begin
   ShowMessage('Обновлений нет, но скоро будет.')
   end
  else
   begin
   ShowMessage('Обновление есть, сейчас буду загружать.');
   Response:=TFileStream.Create('program.rar',fmCreate);
   HTTP.Get('http://sait.ru/program.rar',Response);
   // нужно сохранить архив
   TMemoryStream(Response).SaveToFile('program.rar');
   Response.Free;
   Version.Add(s);
   Version.SaveToFile('version.txt');
   end;
 finally
 HTTP.Free;
 Version.Free;
 end;
end;
архив скачивается сохраняется, все нормально, но во время выполнения ошибка, скрин прилагаю
Миниатюры
Обновление программы  
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
29.03.2013, 09:45  [ТС]
возможно ли создать батник программой которая бы разпоковала архив с заменой файла, во время распоковки программа должна выключиться?
0
0 / 0 / 1
Регистрация: 24.03.2013
Сообщений: 29
29.03.2013, 14:30
Цитата Сообщение от visible Посмотреть сообщение
возможно ли создать батник программой которая бы разпоковала архив с заменой файла, во время распоковки программа должна выключиться?
посмотри в диспечере задач нет ли открытых project.exe. и проверь есть ли доступ, у тебя виндовс7 я понимаю..
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
29.03.2013, 15:04  [ТС]
Цитата Сообщение от MyLogin Посмотреть сообщение
посмотри в диспечере задач нет ли открытых project.exe. и проверь есть ли доступ, у тебя виндовс7 я понимаю..
нет, в процессах не висит. При открытом project.exe архив program.rar недоступен. Закрываю project.exe архив открывается. Да Win7 x64.
А да забыл сказать. при запуске обновления ошибка:
Миниатюры
Обновление программы  
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
29.03.2013, 15:14  [ТС]
Пытался реализовать работу программы в Мемо1. Memo1.Lines.Add('['+timetostr(time)+'] - Текст');
В программе имеется надпись Мемо1. Каким то образом её можно убрать?
Миниатюры
Обновление программы  
0
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 28
31.03.2013, 12:20  [ТС]
никто не знает как такое можно сделать?
0
0 / 0 / 1
Регистрация: 24.03.2013
Сообщений: 29
03.04.2013, 02:18
Цитата Сообщение от visible Посмотреть сообщение
никто не знает как такое можно сделать?
B Object Inspector выбрать Lines нажать ... в открывшемся окне удаляешь содержимое.

Нужен лаунчер?
пиши в ЛС, есть весь готовый исходнык

Добавлено через 34 секунды
[QUOTE=MyLogin;4351986]B Object Inspector выбрать Lines нажать ... в открывшемся окне удаляешь содержимое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2013, 02:18
Помогаю со студенческими работами здесь

Авто обновление программы
Допустим я с помощью get запроса получил ссылку с хостинга,как мне её скачать и заменить на текущую (которая открыта)?? Помогите...

Обновление для программы в Delphi
Что тут не так? Выдает ошибку и все Помогите пожалуйста unit Unit4; interface uses Windows, Messages, SysUtils,...

не получается реализовать автоматическое обновление клиентской части программы
может кто нибудь создавал обновление свойх проектов, через FTP или с помошью других компонентов? если можно примеры

Как реализовать обновление и проверку версии программы через интернет?
2) Как реализовать обновление и проверку версии программы через интернет? Delphi XE5

Автоматическое обновление программы
Подскажите, какой компонент лучше использовать для обновления программы и его использовать? Скачал mxWebUpdate, но там на английском, не...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru