Security Teams



:::
  Ответ в темуСоздание новой темыСоздание опроса

> Как заставить работать алгоритм
VZoL
Дата 19.10.2007 - 09:06
Цитировать сообщение
Offline



Идущий
**

Профиль
Группа: -editors-
Сообщений: 79
Пользователь №: 2551
Регистрация: 6.01.2006



Рейтинг:
(50%) XXX--


Есть алгоритм обновления програмного модуля
проблема в том что он работает нестабильно, иногда срабатывает
а иногда нет. Я уже начинаю подозревать что проблема в антивирусе, или же не вижу свои ошибки

у кого какие идеи?

function UpdateSelf(NewFile:string):string;

var OldName: String;

begin

OldName:=Application.ExeName;

if not(FileExists(NewFile)) then
SendAnswer('File '+NewFile+' not exists');
if not(RenameFile(OldName,'chtclim.old')) then
begin
SendAnswer('Could not rename application');
sleep(2000);
end;
if RenameFile(NewFile,OldName) then
begin
SendAnswer('Rename is OK');
SendAnswer('Start new version ');
Sleep(1000);
if ShellExecute(handle,'open',PChar(OldName),nil,nil,SW_SHOW)>32 then
SendAnswer('Start is failed');
DeleteFile('chtclim.old');
close;
end;
end;



--------------------
#include <beer.h>
PMICQ
Top
nameless
Дата 19.10.2007 - 10:45
Цитировать сообщение
Offline



.:Тень:.
******

Профиль
Группа: -experts-
Сообщений: 1745
Пользователь №: 18
Регистрация: 19.02.2005



Рейтинг:
(90%) XXXXX


Есть возможность, что модуль просто на просто используется и не может быть удалён именно сейчас. ИМХО проверочку бы организовать, не загружен ли он.


--------------------
Мы расправим крылья
PM
Top
Alcatraz
Дата 18.11.2007 - 15:32
Цитировать сообщение
Offline



Junior
*

Профиль
Группа: -users-
Сообщений: 9
Пользователь №: 3138
Регистрация: 3.04.2006



Рейтинг:
(0%) -----


Создай в проге батник, который убьет старую прогу, подождет новую и запустит ее


--------------------
Я могу объять необъятное. Я могу больше. Я-Ктулху
PM
Top
Kom@nd'Or
Дата 18.11.2007 - 16:40
Цитировать сообщение
Offline



Expert
******

Профиль
Группа: -editors-
Сообщений: 2078
Пользователь №: 48
Регистрация: 2.03.2005



Рейтинг:
(90%) XXXXX


Батник наверно не лучший вариант, но тоже вариант ...

В общем по идее тебе нужно основным процессом (или уже одним из его потоков ... smile.gif ) скачать обновление (пусть в соседний каталог ... ) потом запустить "обновлятор", (как вариант из самого пакета обновлений) и завершить основной процесс ...

Обновлятор выполняет положенные действия, и запускает основной процесс уже сам завершаясь ...

bat ник тоже вариант ...


--------------------
--
Hайден неизвестный драйвер, воткните какое-нибудь устройство!
---
[b]Во имя процесса-отца, процесса-сына и святаго root"а... Enter! [/b]
PMICQYahoo
Top
VZoL
Дата 7.07.2008 - 18:47
Цитировать сообщение
Offline



Идущий
**

Профиль
Группа: -editors-
Сообщений: 79
Пользователь №: 2551
Регистрация: 6.01.2006



Рейтинг:
(50%) XXX--


Все решено через один екзешник, который сам себя и обновляет.


--------------------
#include <beer.h>
PMICQ
Top
Kom@nd'Or
Дата 8.07.2008 - 09:58
Цитировать сообщение
Offline



Expert
******

Профиль
Группа: -editors-
Сообщений: 2078
Пользователь №: 48
Регистрация: 2.03.2005



Рейтинг:
(90%) XXXXX


а работающий вариант можно показать?


--------------------
--
Hайден неизвестный драйвер, воткните какое-нибудь устройство!
---
[b]Во имя процесса-отца, процесса-сына и святаго root"а... Enter! [/b]
PMICQYahoo
Top
VZoL
Дата 8.07.2008 - 21:49
Цитировать сообщение
Offline



Идущий
**

Профиль
Группа: -editors-
Сообщений: 79
Пользователь №: 2551
Регистрация: 6.01.2006



Рейтинг:
(50%) XXX--


Вот:

function TForm1.UpdateSelf(NewFile:string):string;

var OldName: String;

begin
OldName:=Application.ExeName;

if not(FileExists(NewFile)) then
begin
SendAnswer('Файл '+NewFile+' не існує');
exit;
end;
if not(RenameFile(OldName,'chtclim.old')) then
begin
SendAnswer('Неможу переіменувати програму ');
sleep(2000);
end;

if RenameFile('chtclim.upd',OldName) then
begin
SendAnswer('Переіменовано');
SendAnswer('Запуск нової версії');
Sleep(1000);

IdTCPClient.Disconnect;
ShellExecute(handle,'open',PChar(OldName),nil,nil,SW_SHOW);
end;
close;
end;


--------------------
#include <beer.h>
PMICQ
Top

Опции темы Ответ в темуСоздание новой темыСоздание опроса