TypeInitializationException beim Starten Windows-Dienst, weil Config-Abschnitt nicht erstellt werden kann

StackOverflow https://stackoverflow.com/questions/3452077

Frage

Ich habe einen seltsamen Fehler auf einem bestimmten Windows Server 2008 R2-Computer (funktioniert sich auf andere 2008 R2 Maschinen), wenn ein Windows-Dienst zu starten. Der Dienst verwendet Common.Logging und log4net . die Konfigurationsabschnittshandler für Common.Logging auf dieser speziellen Maschine können nicht erstellt werden, jedoch.

Es schlägt mit dem folgenden Stack-Traces (zur besseren Lesbarkeit formatiert). Was überrascht mich am meisten ist die SecurityException. Was kann die Ursache sein?

Hat jemand eine Ahnung haben?

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

Weiter geht es mit:

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)

Meine Konfiguration sieht wie folgt aus (die Common.Logging Teil davon sowieso).

<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>
War es hilfreich?

Lösung

Ich habe passiert seltsame Dinge gesehen, wenn Kunden unsere zip (ASP.NET-Anwendung) Datei von unserer Website heruntergeladen werden. Wegen der Sicherheitsfunktion „Diese Datei wurde von einem anderen Computer und könnte Hilfe blockiert werden, um diese Computer zu schützen“.

Entsperrung der Dateien für alle seltsamen Probleme gelöst, dies würde erklären, warum dies nur geschieht om einig Computer mit genau der gleichen Konfiguration.


Die Entblocken Option wird nur dann angezeigt, wenn die Datei tatsächlich in der Registerkarte Allgemein der Dateieigenschaften Dialog blockiert ist:

eingeben Bild Beschreibung hier

Andere Tipps

Sie können auch in Visual Studio 2013 prüfen, ob das Projekt> Eigenschaften> Anwendungs ??Tab> Startobjekt Dropdown-Punkt auf die Programmklasse des Windows-Dienstes konfiguriert ist. Wenn der Wert nicht gesetzt ist, wird der Dienst nicht mit System.TypeInitializationException starten.

Scheint, wie Sie Berechtigungen für das Dienstkonto für den Zugriff der Konfigurationsdatei geben müssen.
EDIT:. Eigentlich auf dem zweiten Blick ist es nicht so scheint das Problem, weil es die Konfigurationsdatei tatsächlich liest, aber man sollte sowieso die Berechtigungen zu

UPDATE: Dies ist ein bekanntes Problem mit .NET 4.0, aber es gibt eine Abhilfe - siehe http://social.msdn.microsoft.com/Forums/en-US/clr/thread/1e14f665-10a3-426b-a75d-4e66354c5522 .

für mich stellte sich heraus zu sein, weil ich die ausführbare Datei von einem Netzwerk zugeordnetes Laufwerk ausgeführt wird, die .NET hält unsecure

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top