Я создаю довольно специализированное приложение-заставку для некоторых киосков под управлением Windows XP. Пользователи, как правило, покидают киоски, не возвращая браузер на домашнюю страницу, поэтому заставка делает следующее:
- Запускается через стандартный механизм заставки
- Уведомляет пользователя, что в последнее время не было никаких действий, и что браузер закроется через X секунд.
- Если X секунд проходит без активности пользователя, хранитель экрана убивает все текущие экземпляры браузера (через Process.GetProcessesByName) и запускает новый экземпляр браузера, который указывает на настроенный веб-сайт (через Process.Start).
- Экран «гаснет», пока пользователь не перемещает мышь или не нажимает клавишу - в этот момент приложение для заставки закрывается.
Когда это работает в Windows Vista или 2008, все работает как положено.
Однако в Windows XP (то есть, что киоски работают), когда приложение заставки закрывается, процесс браузера убивается. Если я добавлю Thread.Sleep незадолго до того, как появится заставка, я смогу просматривать браузер и взаимодействовать с ним до момента выхода из заставки.
Чтобы еще больше запутать ситуацию, Windows XP НЕ проявляет такого поведения, когда я запускаю заставку, нажимая кнопку «Предварительный просмотр» в области настроек, то есть она ведет себя так, как ожидалось. В этом случае запускается точно такой же код.
Я проверил это в среде .NET 2.0, а затем установил .NET 2.0 SP1. На рабочей станции Windows 2008 у меня 3.5 SP1.
Есть ли какая-то разница между этими версиями .NET относительно зависимостей от запущенных процессов? Можно ли установить какой-либо флаг, чтобы убедиться, что запущенный процесс браузера не «привязан» к приложению заставки?