2010-05-06 7 views
6

Ich habe eine .NET 2.0-Anwendung mit nichts Besonderes darin. Es funktionierte bis gestern auf jeder PC, den ich es installierte oder kopierte, egal ob 2.0, 3.0, 3.5 oder 3.5 SP1 installiert wurde, egal ob es Win2000, XP oder sogar Win7 war (insgesamt 100+ Maschinen)..NET-Anwendung auf einem PC, nicht handhabbare Ausnahme

Gestern habe ich meine normale Installationsprozedur gemacht und wollte es einmal starten, um zu überprüfen, ob alles funktioniert ... und es war nicht. Das Programm stürzte hart ab und hinterließ mich mit dem informativen "Willst du diesen Fehler melden?" Dialog. Das Problem ist eine Ausnahme in der Main(String[] args) Routine meiner Anwendung.

Die Ereignisanzeige zeigt den folgenden Eintrag:

Event Type: ErrorEvent 
    Source: .NET Runtime 2.0 Error Reporting 
    Event Category: None 
    Event ID: 5000 
    Date: 05/05/2010 
    Time: 16:09:09 
    User: N/A 
    Computer: myClientPC 
    Description: 
    EventType clr20r3, P1 apomenu.exe, P2 1.4.90.53, P3 4bdedea4, 
    P4 system.configuration, P5 2.0.0.0, P6 4889de74, P7 1a6, P8 136, 
    P9 ioibmurhynrxkw0zxkyrvfn0boyyufow, P10 NIL. 

Nun ... große Informationen. Nach vieler Sucherei konnte ich endlich weitere Informationen zu dieser Ausnahme erhalten (durch einen Handler für UnhandledExceptions direkt in My.MyApplication.New(), Application.Designer.vb Zugabe):

System.Configuration.ConfigurationErrorsException 

    Configuration system failed to initialize 

    at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) 
    at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) 
    at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) 
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) 
    at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName) 
    at System.Net.Configuration.SettingsSectionInternal.get_Section() 
    at System.Net.Sockets.Socket.InitializeSockets() 
    at System.Net.Sockets.Socket.get_SupportsIPv4() 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.get_HostName() 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.RegisterChannel(Boolean SecureChannel) 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) 
    at MyAppNameHere.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Line 81. 

Und an dieser Stelle ich bin stecken ... Ich bin aus von Ideen. Ich verwende keine Art von Konfigurationssystem aus dem Framework (kein Verweis auf System.Configuration, und es wurde nie eine MyAppnameHere.exe.config generiert oder verteilt, noch habe ich diesen Fehler zuvor gesehen). Ich habe auch a bug report at Microsoft (Google Cache) über diesen Fehler gefunden (in einem anderen Kontext). Aber wie es scheint, werden sie es nicht einmal anschauen.

Jede Hilfe wird sehr geschätzt!

Bearbeiten: Ich benutze Visual Studio 2008 Prof .. Crash passiert in Release-und Debug-Build auf dem Client-Rechner. Das Debuggen der Anwendung direkt auf dieser Maschine steht außer Frage, ich fürchte, 300+ Meilen und sie haben nur zwei Computer, mit denen sie arbeiten können.

Edit2: Andere .NET-Anwendungen funktionieren gut.

Edit3: Nach Andrey darauf hingewiesen, hatte ich auch einen Blick auf die Inner-Exception (ich immer vergessen, dass dieses Ding existiert):

System.Configuration.ConfigurationErrorsException 

    Unknown configraution directive "system.serviceModel". (c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Config\machine.config line 145) 

    at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal) 
    at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors) 
    at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() 
    at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) 

ich diesen Abschnitt entfernt und alles funktioniert jetzt Es wird erwartet ... aber jetzt quält mich eine Frage: Warum haben andere Anwendungen funktioniert?

+1

@Bobby gibt es innere Ausnahme? – Andrey

+0

@Andrey: Du bist mein Held! – Bobby

+0

bitte erklären :) – Andrey

Antwort

3

Dieser Fehler weist darauf hin, dass mit einer .config-Datei ein Fehler aufgetreten ist. Dies könnte die Konfigurationsdatei der Anwendung oder vielleicht machine.config sein.

Ich würde vorschlagen, die Deinstallation/Neuinstallation von .net auf diesem Computer.


Eine andere Sache, zu versuchen, um zu sehen, ob der Benutzer Ihre Anwendung ausgeführt werden kann als erhöht (als Administrator ausführen). Das Konfigurations-System versucht möglicherweise, auf eine Datei zuzugreifen, für die der Benutzer keine Rechte hat.Wenn sie als Administrator ausgeführt werden können, ermitteln Sie, auf welche Dateien das Konfigurationssystem zugreift, und weisen Sie dann den Benutzer an, seine Kontoberechtigungen für diese Dateien zu erteilen.

+0

Wie bei der Andeutung von Andrey fand ich heraus, dass die 'machine.config' einen Abschnitt hatte, der nicht geparst werden konnte. Du hattest also recht. Allerdings verstehe ich nicht, warum andere .NET-Programme funktionierten, besonders seit ich diese anderen Anwendungen geschrieben habe und sie alle gegen .NET 2.0 verlinkt sind. :/ – Bobby

0

Es sieht so aus, als ob Ihre Anwendung versucht, einen Socket einzurichten, vielleicht hat der Client-PC eine Firewall, die den Socket blockiert, oder vielleicht wird der Code aufgrund einiger Sicherheitssoftware nicht ausgeführt. Haben Sie versucht, Ihren Code als Administrator auszuführen und alle Sicherheitssoftware deaktiviert?

+0

Das würde den Nachrichten- und Aufruf-Stack nicht erklären. – SLaks

+0

Nur Avira Antivir und Windows Firewall läuft, beide ausgeschaltet, gleiche Ausnahme. – Bobby

0

Haben Sie versuchen, die Datei "... \ Dokumente und Einstellungen \ Benutzer < > \ Lokale Einstellungen \ Anwendungsdaten \ <application_name> ... \ user.config" zu löschen, wie in http://support.microsoft.com/kb/956762/en-gb detailliert? Der Pfad kann in späteren Windows-Versionen anders aussehen.

+0

Keine solche Datei existiert. – Bobby

0

Ich würde vermuten, dass die Maschine eine schlechte Installation des Frameworks hat.

Versuchen Sie, die Deinstallation und Neuinstallation von .Net.

+0

War auch mein erster Eindruck ... Ich halte dies für einen "letzten Ausweg" wegen der abgelegenen Lage und der Tatsache, dass wir die Hardware dieses Clients nicht bedienen. – Bobby

+1

@Bobby, das ist noch besser. Sie müssen es selbst tun. – Will

1

Nach dem Call-Stack zu urteilen, sieht es aus, als ob der Kanal aus einem obskuren Grund falsch konfiguriert ist, wenn Sie es auf andere Weise betrachten, vielleicht gab es irgendwo eine Veränderung im Netzwerk ohne Ihr Wissen - schließlich Sie habe ich gesagt, es hat funktioniert, ich kann einfach nicht helfen zu denken, dass die systemweite Konfigurationsdatei (machine.config) eine falsche Einstellung vielleicht aufgrund von Berechtigungen hat?

Die systemweite Konfiguration befindet sich im Windows-Ordner tief im .NET-Ordner ... Ich denke, die Laufzeit wurde nicht ordnungsgemäß gestartet ... haben Sie versucht, den .NET-Laufzeitoptimierungsdienst neu zu starten?

6

Auf einer Windows 2008 R2 Maschine hatten wir ähnliche Symptome. Wir haben festgestellt, dass die Installation von .NET Framework 3.5.1 von Features unser Problem gelöst hat. Das war der Unterschied zwischen zwei Maschinen, bei denen die eine funktionierte (fehlende 3.5.1) nicht.

0

Ich erhielt diesen Fehler, wenn ich meine App auf dem Produktionsserver bereitgestellt, auf meiner lokalen Entwicklungsmaschine erzeugt keinen Fehler. Also habe ich die Ursache neu gelöst: Mein Server hat ein x64-Betriebssystem, meine App wurde mit der Standard-x86-Plattform kompiliert, geändert zu "Any CPU" -Option, und keine Fehler mehr !!!

Verwandte Themen