Служба Windows Невозможно получить правильную системную культуру

На панели управления я установил для своего региона и языка значение French (France)

Когда я запускаю свое приложение как консольное приложение,

Thread.CurrentThread.CurrentCulture возвращает французский

Но когда я запускаю его как службу Windows, он возвращает инвариантную культуру или английский (США).

Есть ли способ это исправить?

2 ответа

Решение

Сервис, вероятно, работает как пользователь с собственной культурой.

Почему бы не установить культуру, когда вы начинаете свой сервис

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");

Также из культуры по умолчанию в службе Windows

If your Windows Service is running under the SYSTEM account or other account without a 
profile it will use the settings defined under the 
"HKEY_USERS/.DEFAULT/Control Panel/International" registry key.  

You can change these values from "Control Panel / Regional and Language Options / Advanced" 
by checking the checkbox "Apply all settings to the current user account and to the default 
user profile".

Я обычно использую первый метод, так как мне нужно изменить его только для конкретной службы, а не для всей ОС.

.NET 4.5 добавленной CultureInfo.DefaultThreadCurrentCulture а также CultureInfo.DefaultThreadCurrentUICulture Я предлагаю установить его как можно раньше, и это должно решить вашу проблему. Это изменит текущую культуру потоков и все созданные потоки.

Другие вопросы по тегам