Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 324

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Вопрос такого плана. У меня есть фаил "программа.EXE" который выложен на сервере. Его запускают пользователи через сетевой диск. Как мне отключить всех от данного файла для того чтобы заменять его. сервер windows 2000 server

snake11 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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 других типов.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 7 февраля 2008, 13:32

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, snake11!
Мне кажеться, что ваше решение задачи достаточно извращённое. Закрывать у пользователя программу принудительно - за это могут и по голове настучать - допустим, пользователь редактировал данные, а вы его раз!
Я бы лично решил немного по другому. Программа может храниться локально. Но при запуске она проверяет, отличается ли версия на сервере от текущей. Для упрощения задачи, можно рядом с файлом положить текстовый документ с описанием и номером версии. И если версия отличается от текущей, то закачивает новую. Но так как программа не может удалить саму себя, то это решается очень просто. Надо ещё одна программа, программа-стартер. она отобразит сплешскрин и проверит, нет ли новой. Скачает, если надо. И потом запустит.
Если же надо "поддерживать в актуальном состоянии программу", то можно по таймеру проверять наличие новой версии каждые 5-10 минут. Пользователь сам должен решить, когда он готов к обновлению.
Если уж так сложилось, что программу нельзя копировать на локальный винт (есть такие извращенцы), то можно сделать по другому.
На сервере в папке лежит прога-стартер и текстовый документ с указанием текущей актуальной версии. также в этой папке есть папки для каждой версии. название папки и текст в файле есть строго зависимыми (то есть определить папку по записям в текстовом документе можно однозначно). В этих папках лежит выполняемые файлы для кадой версии.
При запуске программа стартер смотрит, с какой папки запускаться и запускает соответсвующий файл.
Сама программа по таймеру смотрит этот файл и если появилась новая версия, то предлагает "обновиться". а на самом деле просто запускает программу стартер и закрывается. надо только выставить небольшую паузу, что бы пользователь не видел две программы одновеменно.
Если кажеться, что папки с разными версиями будут скапливаться - нет. Их просто надо будет удалять потихоньку. в оптимальном варианте, больше 2 папок никогда не будет.
Если же хочеться, что бы пользователи "не видели этих папок", то их можно положить в другом месте. (с глаз долой...)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 февраля 2008, 23:40
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.