2013-12-13 5 views
0

У меня проблема с 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:50

TimeZone информация:

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. Фиксированные - это мои подпрограммы, которые вычисляют время от смещения. Жирные - это проблема и исправление.

Итак, есть ли патч для этой проблемы?

ответ

0

.Net ведет себя правильно, потому что DateTime.Now начинается с времени UTC и применяет местный часовой пояс, а не начиная с местного времени.

Вы могли бы сделать что-то подобное:

+0

Итак, 'GetSystemTime()' работает, я получаю время в UTC, 'GetTimeZoneInformation()' работает, я получаю часовой пояс клиента. Все идет нормально. Но, как уже упоминалось, 'SystemTimeToTzSpecificLocalTime()', всегда преобразуется в серверное время. Информация TimeZone, которая является клиентом, передается, возвращаемое значение истинно. Я подозреваю, что DLL-приложение hook видит эту функцию и возвращает время сервера, не изучая информацию о часовом поясе NULL или иначе. –

+0

Это несчастливо. Казалось бы, их «крючки» перехватывают. Возможно, они исправили это в новой версии? Понятия не имею. Вы можете попробовать версию «Ex». Возможно, они не обманывали этого. –

 Смежные вопросы

  • Нет связанных вопросов^_^