![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Вопрос таков.
Есть программа , которая по умолчанию запускается с главной формой FORM1, вроде все хорошо и все устраивает. Пишу обновление для своей программы и хочу ,когда есть новая версия программы на сервере по умолчанию загружалась FORM2. То есть , когда программа свежая грузится форма 1, а когда есть новая версия тогда форма2. Как заставить открываться форму 2? |
|
#2
|
|||
|
|||
|
Можете в Form1 поставить событие OnCreate.
Если будут обновления то нужно скрыть Form1.Visible:=false; а Form2.Visible:= True; |
|
#3
|
|||
|
|||
|
Код:
var c_ver,new_ver:string; begin //получаешь версию своей программы, //Версию новой программы if c_ver < new_ver then begin Timer1.Enabled:=True; end; Timer1.onTick Form2.Show; Form1.Hide; я так делаю ) если без таймера то падают ошибки Последний раз редактировалось ApxaHGe1, 25.08.2016 в 14:46. |
|
#4
|
|||
|
|||
|
Я просто не правильно выразился.
Суть такая , запускается программа , проверяются версии с сервером. Если версия ниже , переименовываю текущую в qqq_old.exe и запускаю уже как qqq_old.exe и вот её хочу запустить уже с формой 2 (для продолжения скачивания программы qqq.exe) Переименовываю , что бы qqq.exe не заругалась , что такое имя файла уже есть |
|
#5
|
|||
|
|||
|
Я так обновляюсь и все прекрасно работает
Код:
var
ver:string;
restart:TextFile;
FileStream :TFileStream;
begin
ver:=IdHTTP1.Get('http://******.ru/soft/ver.txt');
if ver > GetMyVersion then
begin
FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\'+'BC_new.exe', fmCreate);
IdHTTP1.Get('http://********.ru/soft/BC.exe', FileStream);
FileStream.Free;
AssignFile (restart,ExtractFilePath(Application.ExeName)+'\'+'restart.bat');
Rewrite (restart);
WriteLn (Restart,'DEL BC.exe');
WriteLn (Restart,'REN BC_new.exe BC.exe');;
WriteLn (Restart,'BC.exe');
WriteLn (Restart,'for /L %%b in (1,1,500) Do @Echo %%b >Nul');
CloseFile (restart);
ShellExecute(0,'OPEN',PAnsiChar (ExtractFilePath(Application.ExeName)+'\'+'restart.bat'),0,0,0);
ExitProcess(0);
end; |
| Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение: | ||
starcon (25.08.2016)
| ||
|
#6
|
|||
|
|||
|
Тоже вариант .
Сделаю немного поправок под себя. СПАСИБО |
|
#7
|
||||
|
||||
|
А что мешает запускаться не с основной программы, а с апдейтера? Запускается апдейтер, проверяет наличие обновлений, если есть перезаписывает и запускает, если нет - просто запускает.
|
|
#8
|
|||
|
|||
|
Спасибо за ответ.
Моя программа состоит из одного исполняемого файла и не хочется ради этого ещё одну для апдейта |
|
#9
|
|||
|
|||
|
OK, сделай в DPR специальную ветку - сначала проверить на обновление и, если есть, обновить, потом запустить саму себя и выйти.
Код:
program Project1;
...
function IsUpdateAvailable : Boolean;
begin
...
end;
procedure UpdateProgram;
begin
...
end;
begin
if IsUpdateAvailabe Then
begin
UpdateProgram;
WinExec(ParamStr(0),SW_SHOWNORMAL);
Halt(0);
end;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
starcon (26.08.2016)
| ||
|
#10
|
|||
|
|||
|
Спасибо ,Забрал в проект
|