Форум Академгородка, Новосибирск > Как локализовать на русский язык сервис Windows
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как локализовать на русский язык сервис Windows
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование
Антип Од
Ситуация такая:

Есть написанный на C# Windows service, VS 2010. Без интерфейса. Молча себе работает, ресурсов нет у него и локализация ему совершенно не нужна. И все было отлично, пока ПО поставлялось в страны с европейскими языками. Эти языки живут в одном локале, General Latin, если не ошибаюсь.

И вот пришел черед русской версии. И тут оказалось, что русская винда сразу после старта гасит сервер с издевательским сообщением, что этот сервис бесполезен для данного компьютера и потому остановлен.

Выяснилось, что это потому, что он не локализован. Винда ищет satellite resource DLL, не находит, и считает, что сервис для русской версии не предназначен. Останавливает его, чтоб не ел зря ресурсы.

Как правильно смастерить эту чертову DLL? Так чтоб винда находила ее как satellite resource DLL? Слышал, что надо поставить ее в GAC подписав криптоключем... но ниче пока не получается. Не могу сообразить как ее вообще создать... для проекта windows service в Visual Studio ресурсы не предусмотрены!

Упорные попытки гуглить ничего не принесли, ибо находятся мегатонны инфы о том, как локализовать всякие обычные приложения...

Посоветуйте братья... хоть не решение, но хороший форум где много программистов... На хабр у меня входа нет... А заказчик уже кровожадно смотрит... Считает проблему простейшей.
Eyeless Watcher
Цитата(Антип Од @ 16.12.2013, 12:16) *
Упорные попытки гуглить ничего не принесли

ORLY?
По первой же ссылке все ключевые слова про вашу проблему присутствуют.
Антип Од

Это я видел. Слова присутствуют - ответ отсутствует. Можно найти и пару ответов по теме, рекомендуют это: I strongly named the satellite assembly and registered it in the GAC. Не получается сделать эту чертову assembly так, чтобы винда ее находила.

Остальное - ссылки про локализацию обычных приложений, а не сервисов. Service - слишком часто употребляемое слово, поэтому гугль вываливает результаты не те, хотя и все слова там встречаются

Слово Windows встречается в каждой статье, а слово service означает кроме программы еще и, например, перевозку граждан в электричке и поминки и дофига еще всего.
fiend
QUOTE(Антип Од @ 16.12.2013, 12:16) *
Молча себе работает, ресурсов нет у него и локализация ему совершенно не нужна.

Зачем тогда потребовались старания про locale-specific satellite assemblies?

QUOTE(Антип Од @ 16.12.2013, 12:16) *
И тут оказалось, что русская винда сразу после старта гасит сервер с издевательским сообщением, что этот сервис бесполезен для данного компьютера и потому остановлен.

Выяснилось, что это потому, что он не локализован. Винда ищет satellite resource DLL, не находит, и считает, что сервис для русской версии не предназначен. Останавливает его, чтоб не ел зря ресурсы.

Безосновательные утверждения. Наводящие вопросы:
1. Как выглядит "издевательское" сообщение дословно (из Event Log)?
2. Есть ли код ошибки, stack trace, что-нибудь ещё?
3. Как сконфигурирован сервис в реестре (что там в ветке HKLM\SYSTEM\CurrentControlSet\<ServiceName>)?

QUOTE(Антип Од @ 16.12.2013, 12:16) *
Как правильно смастерить эту чертову DLL? Так чтоб винда находила ее как satellite resource DLL? Слышал, что надо поставить ее в GAC подписав криптоключем... но ниче пока не получается. Не могу сообразить как ее вообще создать... для проекта windows service в Visual Studio ресурсы не предусмотрены!

1. Делать ресурсы: http://msdn.microsoft.com/en-us/library/21...(v=vs.110).aspx - в вашем случае, там будут пустые ресурсные файлы (или с тем же содержимом, что и для en-US).
2. Подписывать assembly: http://msdn.microsoft.com/en-us/library/xc...(v=vs.110).aspx - а ещё в свойствах проекта MSVS есть отдельная закладка "Signing" smile.gif
3. Ставить в GAC: см. п. 1 - gacutil /i

QUOTE(Антип Од @ 16.12.2013, 12:16) *
Упорные попытки гуглить ничего не принесли, ибо находятся мегатонны инфы о том, как локализовать всякие обычные приложения...

Если "локализация ему совершенно не нужна", то зачем стараться локализовать?

Честно говоря, имея некоторый опыт работы с Windows и .NET, ни разу о такой проблеме / вопросе не слышал. Дайте, пожалуйста, ссылку почитать, где описано, почему "Винда ищет satellite resource DLL, не находит, и считает, что сервис для русской версии не предназначен."
Антип Од
Спасибо. Честно во всем признаюсь:

Цитата(fiend @ 17.12.2013, 2:48) *
Цитата(Антип Од @ 16.12.2013, 12:16) *
Молча себе работает, ресурсов нет у него и локализация ему совершенно не нужна.

Зачем тогда потребовались старания про locale-specific satellite assemblies?

Затем, что:
У меня на рабочей машине, где компиллятор английская Win 7, VS 2010. В итоге выходит так:
1) Английский Windows Server (пробовали 2008 и 2012 - результаты абсолютно одинаковые) - все работает (и не первый год)
2) Английский сервер с установленным русским MUI. По виду от русского ничем не отличается - все работает!!!
3) Русский сервер - Винда гасит сервис за ненадобностью
4) Русский сервер с установленным английским MUI - Винда гасит сервис за ненадобностью....

Цитата
Цитата(Антип Од @ 16.12.2013, 12:16) *
И тут оказалось, что русская винда сразу после старта гасит сервер с издевательским сообщением, что этот сервис бесполезен для данного компьютера и потому остановлен.

Выяснилось, что это потому, что он не локализован. Винда ищет satellite resource DLL, не находит, и считает, что сервис для русской версии не предназначен. Останавливает его, чтоб не ел зря ресурсы.

Безосновательные утверждения. Наводящие вопросы:
1. Как выглядит "издевательское" сообщение дословно (из Event Log)?
2. Есть ли код ошибки, stack trace, что-нибудь ещё?
3. Как сконфигурирован сервис в реестре (что там в ветке HKLM\SYSTEM\CurrentControlSet\<ServiceName>)?

1. Сообщение: Служба <service name> на <computer name> была запущена и затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами.
2. Нету! Нет exception (сервер перехватывает их все и пишет в лог (свой, не системный) все подробности). В системном логе - нет ошибок. Написано - служба остановлена. Все точно так, как будто нажали кнопку стоп. Добавлю еще что единственное сообщение он в лог выдает. О своем старте. То есть, OnStart - вызывается. И все. Он не успевает полезть к базе данных, не успевает открыть порты и т.д.
3.
DelayedAutostart 0x0
Display Name <Sevice Name>
ErrorControl 1
ImagePath <Correct Path>
ObjectName <LocalSystem>
Start 0x2
Type 0x10
WOW64 0x1

Добавлю, что на русских серверах не работает ни под какими эккаунтами, на английских работает под любыми, у которых прав хватает.

Цитата
Цитата(Антип Од @ 16.12.2013, 12:16) *
Как правильно смастерить эту чертову DLL? Так чтоб винда находила ее как satellite resource DLL? Слышал, что надо поставить ее в GAC подписав криптоключем... но ниче пока не получается. Не могу сообразить как ее вообще создать... для проекта windows service в Visual Studio ресурсы не предусмотрены!


1. Делать ресурсы: http://msdn.microsoft.com/en-us/library/21...(v=vs.110).aspx - в вашем случае, там будут пустые ресурсные файлы (или с тем же содержимом, что и для en-US).
2. Подписывать assembly: http://msdn.microsoft.com/en-us/library/xc...(v=vs.110).aspx - а ещё в свойствах проекта MSVS есть отдельная закладка "Signing" smile.gif
3. Ставить в GAC: см. п. 1 - gacutil /i


Спасибо... изучаю.

Цитата
Цитата(Антип Од @ 16.12.2013, 12:16) *
Упорные попытки гуглить ничего не принесли, ибо находятся мегатонны инфы о том, как локализовать всякие обычные приложения...

Если "локализация ему совершенно не нужна", то зачем стараться локализовать?

Без локализации, похоже, не работает на русских версиях серверов.

Честно говоря, имея некоторый опыт работы с Windows и .NET, ни разу о такой проблеме / вопросе не слышал. Дайте, пожалуйста, ссылку почитать, где описано, почему "Винда ищет satellite resource DLL, не находит, и считает, что сервис для русской версии не предназначен."


Даю! Нашел в одном месте. Но там не написано, как эту DLL правильно оформить и обозвать. http://stackoverflow.com/questions/6999835...windows-service

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

Пока что есть несколько теорий. Надо проверить на простейшем Dummy сервисе. Будет требовать локализацию, или нет... Он, вообще-то пользуется несколькими DLL-ками из сторонних проектов... Причем одна из них - точно локализована на 4 языка. Может, дело в этом. Ага, а еще эти DLL могут ссылаться на Windows.Forms...

Антип Од
Все, победил, всем спасибо.

Засада вот где:

В текст незаметно закралось название группы пользователей "Everyone" на английском языке!!!
В итоге вышло так, что испаноязычные и португалоязычные версии софта у нас есть и они работают. Но! Их сервера расположены в Штатах и на них такая группа пользователей есть. Оказалось, что в латинской америке сколько хочешь клиентов, но ни одного сервера. Локал нипричем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.