У меня есть странная ошибка на определенной машине Windows Server 2008 R2 (она работает над другими 2 008 машинами R2) при запуске службы Windows. Сервисное Распространенное использование. Вход и log4net. Однако на этой определенной машине обработчик разделов конфигурации для Общего. Вход не может быть создан.
Это перестало работать со следующими отслеживаниями стека (отформатированный для лучшей удобочитаемости). Что удивляет меня, больше всего SecurityException
. Что может вызвать это?
У кого-либо есть подсказка?
System.TypeInitializationException: The type initializer for
'MyWindowsService.Program' threw an exception.
--->
Common.Logging.ConfigurationException: Failed obtaining configuration for
Common.Logging from configuration section 'common/logging'.
--->
System.Configuration.ConfigurationErrorsException: An error occurred creating
the configuration section handler for common/logging: Request failed.
(C:\Path\MyWindowsService.exe.Config line 7)
--->
System.Security.SecurityException: Request failed.
at System.RuntimeTypeHandle.CreateInstance(
RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis,
Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,
Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Configuration.TypeUtil.CreateInstanceWithReflectionPermission(Type type)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(
RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRestrictedPermissions(
RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord)
at System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(
FactoryRecord factoryRecord)
at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(
String configKey, Boolean& isRootDeclaredHere)
--- End of inner exception stack trace ---
Это продолжает:
at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(
String configKey, Boolean& isRootDeclaredHere)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(
String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject,
Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at Common.Logging.LogManager.<>c__DisplayClass6.b__3()
at Common.Logging.Configuration.ArgUtils.<>c__DisplayClass13.b__12()
at Common.Logging.Configuration.ArgUtils.Guard[T](Function`1 function,
String messageFormat, Object[] args)
--- End of inner exception stack trace ---
at Common.Logging.Configuration.ArgUtils.Guard[T](Function`1 function,
String messageFormat, Object[] args)
at Common.Logging.LogManager.BuildLoggerFactoryAdapter()
at Common.Logging.LogManager.get_Adapter()
at Common.Logging.LogManager.GetLogger(Type type)
at MyWindowsService.Program..cctor()
--- End of inner exception stack trace ---
at MyWindowsService.Program.Main(String[] args)
Моя конфигурация похожа на это (Общее. Вход части его так или иначе).
Я видел странные вещи, которые происходили, когда клиенты загружали наш zip-файл (приложение ASP.NET) с нашего веб-сайта. Из-за функции безопасности «Этот файл пришел с другого компьютера и может быть заблокирован для защиты этого компьютера».
Разблокирование файлов решило все странные проблемы, это могло бы объяснить, почему это происходит только на некоторых компьютерах с точно такой же конфигурацией.
Параметр «Разблокировать» отображается только в том случае, если файл фактически заблокирован на вкладке «Общие» диалогового окна свойств файла:
Похоже, вам нужно предоставить разрешения учетной записи службы для доступа к файлу конфигурации.
РЕДАКТИРОВАТЬ: На самом деле на второй взгляд это не похоже на проблему, потому что на самом деле он читает файл конфигурации, но вы все равно должны дважды проверить разрешения.
ОБНОВЛЕНИЕ: это известная проблема с .NET 4.0, но есть обходной путь - см. http://social.msdn.microsoft.com/Forums/en-US/clr/thread/1e14f665-10a3 -426b-a75d-4e66354c5522 .