1

Немного предыстории:

У меня есть четыре приложения, которые работают как службы на множестве компьютеров с Windows XP, два из которых являются приложениями Java. Все четыре приложения изначально были разработаны для запуска с сервера Linux, и к нему подключены три машины с Windows XP, но требования клиентов подразумевали перенос этих приложений на Windows, чтобы все можно было запускать с одной машины.

Эта проблема:

Так как мы не хотели кардинально изменять что-либо в нашем коде, чтобы запускать приложения как сервисы, мы использовали instsrv.exe и srvany.exe для установки и запуска приложений. Это прекрасно работает для двух приложений C ++, и по большей части, Java-приложения работают нормально. Однако, когда пользователь выходит из системы, Java-приложения останавливаются. Фактические службы все еще работают, потому что java.exe (или javaw.exe , неважно, какой) все еще работает, но приложение больше не работает. Что касается диспетчера служб, все работает нормально, и поэтому он не перезапускает службу, как следует. Обратите внимание, что основной пользователь использует ограниченную учетную запись и поэтому не может перезапустить службы вручную.

Материал, который мы рассмотрели / попробовали:

srvany.exe. был выбран в первую очередь потому, что он бесплатный (как в пиве) и относительно прост в настройке. Мы также рассмотрели srvstart.exe , но я считаю, что он показал ту же проблему. Мы рассмотрели две выделенные оболочки Java-сервиса, но они были исключены из рассмотрения из-за условий лицензирования и / или сложности их настройки. Обратите внимание, что YAJSW изначально не рассматривался и, если позволяет время, может быть проверен.

Похоже, что проблема не существует в Windows 7, но поскольку наш клиент требует Windows XP, это не вариант.

Я также пытался разрешить взаимодействие с двумя приложениями java на рабочем столе, но это не решает проблему при использовании javaw.exe и отображает окно командной строки при использовании java.exe , что крайне нежелательно, даже если оно решает проблему эта проблема. До сих пор нашей временной мерой было просить клиента не выходить из учетной записи, а использовать только сменного пользователя.

Что-то еще мне не хватает или стоит попробовать? Это также зависит от времени, так как, когда эти устройства выходят за дверь, может быть чрезвычайно трудно осуществить исправление на месте.

1 ответ1

3

Вам нужно добавить флаг -Xrs в командную строку java.exe, чтобы предотвратить выход JVM при выходе из системы с XP. Эта проблема не возникает в Windows 7 (или Vista/Server 2008), поскольку "изоляция сеанса 0" не позволяет пользователям входить в систему (и, следовательно, выходить из нее) в сеансе 0, месте, где работают службы.

Однако будьте осторожны - если ваше java-приложение отлавливает события завершения работы, они могут запускаться не так, как ожидалось, когда вы используете флаг -Xrs. Это проблема для вас?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .