2010-08-10 10 views
15

Tengo un error extraño en una máquina específica de Windows Server 2008 R2 (funciona en otras máquinas 2008 R2) cuando se inicia un servicio de Windows. El servicio usa Common.Logging y log4net. Sin embargo, en esta máquina específica no se puede crear el controlador de sección de configuración para Common.Logging.TypeInitializationException al iniciar servicio de Windows porque la sección de configuración no puede ser creado

falla con los siguientes seguimientos de pila (formateado para una mejor legibilidad). Lo que más me sorprende es el SecurityException. ¿Qué puede causar esto?

¿Alguien tiene una pista?

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 --- 

Continúa con:

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.<BuildLoggerFactoryAdapter>b__3() 
at Common.Logging.Configuration.ArgUtils.<>c__DisplayClass13.<Guard>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) 

Mi configuración es similar a esto (la parte Common.Logging de todos modos).

<configSections> 
    <sectionGroup name="common"> 
    <section name="logging" 
      type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> 
    </sectionGroup> 
</configSections> 

<common> 
    <logging> 
    <factoryAdapter 
    type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4net"> 
     <arg key="configType" value="INLINE" /> 
    </factoryAdapter> 
    </logging> 
</common> 
+0

Y lo que hace su mirada archivo de configuración como? –

+0

Muy básico en realidad. Pensé que realmente no importaba porque funciona perfectamente bien en otras máquinas. Pero publicaré las partes relevantes de todos modos. –

Respuesta

17

He visto cosas extrañas que suceden cuando los clientes descargar nuestro archivo zip (aplicación ASP.NET) de nuestra página web. Debido a la característica de seguridad "Este archivo vino de otra computadora y podría estar bloqueado para ayudar a proteger esta computadora".

Desbloquear los archivos resolvió todos los problemas extraños, esto explicaría por qué esto sólo está ocurriendo om algunas computadoras con exactamente la misma configuración.


La opción Desbloquear sólo se muestra cuando el archivo está realmente bloqueado en la pestaña General del diálogo de propiedades del archivo:

enter image description here

+0

Probablemente me hayas ahorrado horas de depuración con esta respuesta. ¡Gracias! – Jacob

+0

Esto resolvió el problema para mí. Gracias. Tuve algunos problemas para encontrar el comando de desbloqueo, así que edité la respuesta para agregar una captura de pantalla. –

+0

@Flores You legend – heymega

1

Parece que necesita otorgar permisos a la cuenta de servicio para acceder al archivo de configuración.
EDIT: En realidad en la segunda vista, no parece que ese es el problema, porque en realidad está leyendo el archivo de configuración, pero se debe revisar los permisos de todos modos.

ACTUALIZACIÓN: Este es un problema conocido con .NET 4.0, pero hay una solución - ver http://social.msdn.microsoft.com/Forums/en-US/clr/thread/1e14f665-10a3-426b-a75d-4e66354c5522.

+0

Sí, ya lo está leyendo. Pero lo verificaré de todos modos. –

+0

¿Es esto .NET 4.0? Puede haber un error en el marco ... ver la respuesta aceptada a http://stackoverflow.com/questions/2725432/net-4-0-application-on-network-share-causes-securityexception ... still wouldn ¿Explicar por qué funciona en una máquina diferente, a menos que esté obteniendo esto solo cuando se depura de forma remota? Bueno, supongo que no lo eres porque dices que sucede cuando comienzas el servicio. –

+0

... Ver http://social.msdn.microsoft.com/Forums/en-US/clr/thread/1e14f665-10a3-426b-a75d-4e66354c5522este es un problema conocido con .NET 4.0 –

3

También puede comprobar en Visual Studio 2013 si el proyecto> Propiedades> Pestaña Aplicación> El menú desplegable del objeto de inicio está configurado para apuntar a la clase de programa del servicio de Windows. Si el valor no está establecido, el servicio no podrá comenzar con System.TypeInitializationException.

0

acudieron a mí para ser porque yo estaba corriendo el ejecutable desde una red de unidad asignada, que considera no segura .NET

Cuestiones relacionadas