![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Управление доступом [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;