Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Управление доступом [D5, Win2k]


rus9 ©   (2005-07-18 10:25:00) 

Уважаемые Мастера!
Пользователи загружают мою программу со специально выделенного компьютера.
Проблема: при обновлении ПО после предупреждения пользователей об отключении к моменту старта обновления самостоятельно отключаются не все.
Подскажите, как можно программно получить доступ к используемому ПО для удаления.


Alexander Panov   (2005-07-18 13:04:00) [1]

Вообще не вижу проблемы при запуске с сервера в случае систем выше W98.

Простейшая технология, даже можно не убивать зависшие сессии.

1. В простейшем случае используется файл-флажок(или любой подобный заменитель).
2. Старая файл программ на сервере переименовывается.
3. Программа проверяет периодически взведение флажка, и при его наличии перезапускается(может сначала предупреждать пользователя;).
4. В принципе, вот и все.


isasa   (2005-07-18 12:40:00) [2]

>И все же проще копировать с сервера exe-файл на клиента и с клиента уже запускать.

Все вспомноли о DCOM. ;)


Digitman   (2005-07-18 12:33:00) [3]


> Slym ©   (18.07.05 12:32) [17]


>  NT системы могут рвать Сетевые сессии к файлам


рвать-то рвать ... но КЛИЕНТУ каково ?


Slym   (2005-07-18 12:32:00) [4]

Вообще NT системы могут рвать Сетевые сессии к файлам... (как вариант) переименование подхваченного файла на сервере локально (не всегда действует)


evvcom   (2005-07-18 12:30:00) [5]


> rus9 ©

И все же проще копировать с сервера exe-файл на клиента и с клиента уже запускать. Естественно копировать по условию, проверив версию. Имхо.


rus9   (2005-07-18 12:18:00) [6]

[10]
[14]
ошибка: не "загрузка" - "запуск". Sorry


Anatoly Podgoretsky   (2005-07-18 11:42:00) [7]

chili   (18.07.05 11:08) [10]
А ты спроси автора, и поймешь что он подразумевает под "загрузкой"


rus9   (2005-07-18 11:21:00) [8]

[11]
[12]
чем же пользователь виноват ? зачем ты ему проблемы создаешь ?
Понял. Спасибо. Делаю апдейт-сервер


Digitman   (2005-07-18 11:13:00) [9]


> закрыть сеансы


чем же пользователь виноват ? зачем ты ему проблемы создаешь ?

ведь твое работающее в дан.момент ПО ничего не знает о том что файл.сервер закрыл сеанс

ты должен сделать свое ПО клиентом своего апдейт-сервера и "научить" свое ПО по "приказу" апдейт-сервера немедля завершать работу


Alexander Panov   (2005-07-18 11:09:00) [10]

rus9 ©   (18.07.05 10:48) [5]

Тебе же ответили.

1. Используй нотификацию для своей программы.
2. нотификация одлжна откуда-то приходить, т.е. должна запускаться, например, на сервере программа для обновления, которая должна извещать все запущенные программы( Как вариант - появление файла-флажка на сервере).
3. В случае зависания программы на рабочей станции, на сервере воспользуйся WMI для освобождения ресурса.


chili   (2005-07-18 11:08:00) [11]

Пользователи загружают мою программу со специально выделенного компьютера.

Может я что то не правильно понял,  но слово "Загружать" отличаеться от "Запускать"


isasa   (2005-07-18 11:01:00) [12]

Если я правильно понял, речь идет о сервере приложений.
Разбить ПО на клиента и серверную часть.


Anatoly Podgoretsky   (2005-07-18 11:00:00) [13]

chili   (18.07.05 10:58) [7]
Э это зачем ты копируешь файл на машину?
" Пользователи загружают мою программу со специально выделенного компьютера."


chili   (2005-07-18 10:58:00) [14]


Function GetFileDate(Const FileName: TFileName): TDateTime;
Var
SearchRec: TSearchRec;
begin
Result := Now;
if FindFirst(FileName,faAnyFile-faDirectory,SearchRec) = 0 then
 begin
  Result:=FileDateToDateTime(SearchRec.Time);
  FindClose(SearchRec);
 end;
end;

procedure TForm1.FormShow(Sender: TObject);
Var
   SearchRec: TSearchRec;
   Str: TStringList;
   S: String;
begin
IF FileExists(PATH + '\Update\' + ExtractFileName(ParamStr(0))) and
   (GetFileDate(PATH + '\Update\' + ExtractFileName(ParamStr(0))) <
    GetFileDate(ParamStr(0))) then
 Begin
  With TStringList.Create Do
   try
    Add(':Repeat');
    Add('IF Exist "' + ParamStr(0) + '" Del "' + ParamStr(0) + '"');
    Add('IF Exist "' + ParamStr(0) + '" goto Repeat');
    Add('Copy "' + PATH + '\Update\' + ExtractFileName(ParamStr(0)) + '" "' + ParamStr(0) + '"');
    Add('"' + ParamStr(0) + '"');
    Add('del update.bat');
    SaveToFile('update.bat');
    WinExec('update.bat', SW_HIDE);
    Application.MainForm.Close;
    Exit;
   finally
    Free;
   end;
 End; {IF}
end;  


rus9   (2005-07-18 10:53:00) [15]

[2]
апдейт-сервер (или используй готовый)
апдейт-сервер - это что :(


rus9   (2005-07-18 10:48:00) [16]

[4]
закрыть сеансы


Digitman   (2005-07-18 10:46:00) [17]


> rus9 ©   (18.07.05 10:42) [3]


> механизмами


механизмами, позволяющими что? удалить открытый файл ?


rus9   (2005-07-18 10:42:00) [18]

А нельзя воспользоваться механизмами ОС (W2000)


Digitman   (2005-07-18 10:42:00) [19]


> как можно программно получить доступ к используемому ПО
> для удаления


сам подумай - как можно удалить используемый в данный момент ресурс ?

напиши апдейт-сервер (или используй готовый)
сделай обновляемое тобой ПО клиентом этого апдейт-сервера


Alexander Panov   (2005-07-18 10:27:00) [20]

Application.MainForm.Close;
Application.Termanate;


Наверх

Титульная страница Поиск, карта сайта Написать письмо