"Если вдруг открылся люк, не пугайся, это глюк!" (с) Если что-то работает не так, вы нашли ошибку или опечатку в программе — вам в этот раздел
OldHorse
Обнаружилась некая фича (или глюк?).
MyChat Server установлен как служба (Win XP Prof SP3).
При загрузке машины все происходит, как положено. Стартует сервис MyChatServer (srvany.exe, тип запуска Auto, системная учетная запись, разрешено взаимодействие с рабочим столом). Запускается процесс mcserv.exe, клиенты работают.
UVS1.PNG
Список процессов после загрузки

Регистрируемся на машине любым профилем. Процесс mcserv.exe получает доступ к рабочему столу, можно порулить, можно не трогать (безразлично). Все бы хорошо, но после завершения сеанса пользователя (logoff.exe) процесс mcserv.exe завершается, причем штатно, как будто ему выдано Alt-X.
UVS2.PNG
Список процессов после Logoff

Клиенты, естественно, отваливаются, иногда даже с ошибкой (о чем-то этом уже был пост "Вылезла такая ошибка" от Andric). Уровень привилегий пользователя безразличен (администратор/не администратор).
При последующей регистрации под любым пользователем повторного старта процесса не происходит, но можно запустить mcserv.exe ручками, и все опять работает. Можно оживить и другим способом - перезапустить службу. При этом происходит и повторный старт mcserv.exe. Можно, конечно, в автозапуск вставить тупой рестарт службы, но это не есть здорово, юзеры будут нервничать. Либо не трогать машину в рабочее время, что тоже не есть хорошо.
Если это принципиальное ограничение, что ж, надо понять и простить, есть (и много) таких программ, жутко дорогой CommView, например. Если можно поправить, просто замечательно...
Аватара пользователя
Алексей Пикуров
Один вопрос: если сервису запретить взаимодействие с рабочим столом, он ведёт себя так же при logoff?
OldHorse
Проверил. Эффект для меня предсказуемый, проходил уже.
Служба нормально стартует и работает. После завершения сеанса процесс mcserv.exe остается и все работает.
Повторные регистрации/выходы работу не нарушают.
Но,
как и следовало ожидать, теряет интерфайс к рабочему столу, порулить нельзя.
Повторный запуск mcserv.exe не помогает, говорит база недоступна и отваливается.
С CommView такой финт, кстати, прокатывает, но криво - пакеты недоступны, а настройки сменить - пожалуйста.
При запуске службы под учетной записью администратора - те же самые яйца, только в профиль.
Можно бы попробовать запуск mcserv.exe из назначенных заданий с учетной записью администратора, но заранее уверен, что проблему не вылечит. Боролся уже с такими вещами. Интерфейсная часть то будет, то нет (чаще нет), а закрытие ее будет убивать процесс.
Обычно проблема решается разделением модулей сервисной и интерфейсной части.
Помнится только один случай удачного совмещения в одном модуле - FPinger. Как сделано, автор его знает. Из видимых различий заметил только, что при запуске под сервисом блокируется завершение программы из интерфейсной части. Но и программа, скажем мягко, сильно попроще.
Аватара пользователя
Алексей Пикуров
Я понял. Болезнь лечится, и мы активно над её лечением работаем. Всё решается созданием WEB-интерфейса для управления сервером. Когда будет полностью готово, мы просто снесём GUI с сервера, и сделаем его обычным сервисом.

В данный момент есть просмотр логов через WEB и изменение настроек сервера через браузер, рекомендую пользоваться. Сейчас активно работаем над управлением пользователями и другими настройками, в каждой новой версии добавляем всё новые и новые фичи. Ну и про WEB-суппорт на сайт не забываем, это из приятных бонусов.

А пока что для полноценной настройки сервера нужно остановить сервис, запустить обычный EXE (GUI), настроить что нужно, выйти из него и запустить сервис по новой. Запускать параллельно два EXE не выйдет, база данных открывается в монопольном режиме.

P.S. Есть ещё административные консольные команды, но, конечно, они не покрывают весь спектр возможностей сервера. Однако многие вкусные вещи делать ими можно. Чтобы получить эти возможности - нужно дать право на выполнение административных консольных команд в правах группы пользователей на сервере.