|
Вопрос # 1 324/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Вопрос такого плана. У меня есть фаил "программа.EXE" который выложен на сервере. Его запускают пользователи через сетевой диск. Как мне отключить всех от данного файла для того чтобы заменять его. сервер windows 2000 server
 |
Вопрос задал: snake11 (статус: Посетитель)
Вопрос отправлен: 7 февраля 2008, 05:59
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, snake11!
Служба сервера представляет собой сервис (C:\WINDOWS\system32\svchost.exe -k netsvcs). Чтобы отключить пользователей Вы можете остановить службу, сделать это можно с помощю оснастки Администрирование->Службы Панели управления. Однако в этом случае будут закрыты все подключения.
Есть другой вариант, полулегальный - закрыть все Handle, связанные с интересующим Вас файлом, тогда приложение будет считать что произожла ошибка и файл теперь недоступен.
Чтобы осуществить это можно использовать Process Explorer (www.sysinternals.com), при этом Вы получите предупреждение о том, что при закрытии этого Handle возможна нестабильная работа системы - не обращайте внимание, это связано с тем, что файл открыт процесом System (сервис сервера выполняется в его адресном пространстве).
Механизм поиска Handle можно посмотреть в примере File Unfreezer (www.delphi.int.ru/download/file/288/). В нем поиск ведется только среди Handle типа File, однако можно переделать и для Handle других типов.
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, snake11!
Мне кажеться, что ваше решение задачи достаточно извращённое. Закрывать у пользователя программу принудительно - за это могут и по голове настучать - допустим, пользователь редактировал данные, а вы его раз!
Я бы лично решил немного по другому. Программа может храниться локально. Но при запуске она проверяет, отличается ли версия на сервере от текущей. Для упрощения задачи, можно рядом с файлом положить текстовый документ с описанием и номером версии. И если версия отличается от текущей, то закачивает новую. Но так как программа не может удалить саму себя, то это решается очень просто. Надо ещё одна программа, программа-стартер. она отобразит сплешскрин и проверит, нет ли новой. Скачает, если надо. И потом запустит.
Если же надо "поддерживать в актуальном состоянии программу", то можно по таймеру проверять наличие новой версии каждые 5-10 минут. Пользователь сам должен решить, когда он готов к обновлению.
Если уж так сложилось, что программу нельзя копировать на локальный винт (есть такие извращенцы), то можно сделать по другому.
На сервере в папке лежит прога-стартер и текстовый документ с указанием текущей актуальной версии. также в этой папке есть папки для каждой версии. название папки и текст в файле есть строго зависимыми (то есть определить папку по записям в текстовом документе можно однозначно). В этих папках лежит выполняемые файлы для кадой версии.
При запуске программа стартер смотрит, с какой папки запускаться и запускает соответсвующий файл.
Сама программа по таймеру смотрит этот файл и если появилась новая версия, то предлагает "обновиться". а на самом деле просто запускает программу стартер и закрывается. надо только выставить небольшую паузу, что бы пользователь не видел две программы одновеменно.
Если кажеться, что папки с разными версиями будут скапливаться - нет. Их просто надо будет удалять потихоньку. в оптимальном варианте, больше 2 папок никогда не будет.
Если же хочеться, что бы пользователи "не видели этих папок", то их можно положить в другом месте. (с глаз долой...)
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 февраля 2008, 23:40
Оценка за ответ: 5
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|