У меня проблема с Citrix, где часовой пояс (GetTimeZoneInformation()
) возвращает клиент, где все остальные функции времени (GetLocalTime()
, localtime()
) возвращает время сервера. Что интересно, SystemTimeToTzSpecificLocalTime()
также возвращает время сервера, даже если информация о часовом поясе, которую я передаю функции, является клиентом.Проблема с часовым поясом с Citrix C++/Win API
Я знаю, что XenApp 5.0 использует tzhook.dll для подключения к вызовам для возврата клиента или сервера в зависимости от конфигурации. Это должно объяснить, почему, несмотря на правильность предвзятости и UTC, SystemTimeToTzSpecificLocalTime()
все еще возвращает сервер в то время как UTC - математика Bias должна была вернуть время клиента.
Xenapp настроен на использование часового пояса клиента. Я также подтвердил это в реестре на основе этой статьи CTX303498. Также интересно, что .Net ведет себя правильно, он регистрирует и возвращает время/часовой пояс клиента. Я предполагаю, что у dll hook есть какая-то ошибка, которая не применяется равномерно по всем функциям.
Кто-нибудь знает какое-либо разрешение, кроме обновления до Xenapp 6.0? Модернизация идет полным ходом, но не будет происходить до года или около того. Любая настройка реестра, патчи и т. Д.? Помогите оценить.
Citix XenApp 5,0
Win 2008 г1
Update:
Я применил горячий починки CTX125414. Теперь я получаю согласованное поведение, которое я получаю в клиентской среде, где время является клиентом, но при преобразовании из Local в UTC оно использует смещение сервера.
Ниже приведено тестовое приложение.
Местная информация Время:
Сейчас: 12/17/2013 2:50:54 PM
GetLocalTime: 14:50
LocalTime: Вт 17 декабря 14:50:54 2013
UTC информация: GetSystemTime: 21:50TimeZone информация:
Bias, имя: 420, Mountain US Standard Time
UTC Локально с т.з.: 14:50
UTC в местное без TZ: 16:50
Местное время по Гринвичу с т.з.: 19:50
Местное время по Гринвичу без TZ: 19:50Фиксированные Конверсии:
UTC Локально с т.з.: 14:50
Местное время по Гринвичу с т.з.: 21:50
The TimeZone информация используется Win API. Фиксированные - это мои подпрограммы, которые вычисляют время от смещения. Жирные - это проблема и исправление.
Итак, есть ли патч для этой проблемы?
Итак, 'GetSystemTime()' работает, я получаю время в UTC, 'GetTimeZoneInformation()' работает, я получаю часовой пояс клиента. Все идет нормально. Но, как уже упоминалось, 'SystemTimeToTzSpecificLocalTime()', всегда преобразуется в серверное время. Информация TimeZone, которая является клиентом, передается, возвращаемое значение истинно. Я подозреваю, что DLL-приложение hook видит эту функцию и возвращает время сервера, не изучая информацию о часовом поясе NULL или иначе. –
Это несчастливо. Казалось бы, их «крючки» перехватывают. Возможно, они исправили это в новой версии? Понятия не имею. Вы можете попробовать версию «Ex». Возможно, они не обманывали этого. –