Vista-Ausnahme in .NET-Anwendung "Ausnahmebedingungsnachricht"

8

Hintergrund

Ich habe eine VB .NET Anwendung auf dem 4.0 Framework erstellt, Teil der Hauptfunktionalität ist der integrierte AxWMPLib.AxWindowsMediaPlayer welcher es uns ermöglicht einen Dateipfad als URL an den Player zu übergeben und dann abzuspielen es durch den eingebauten Media Player. Meine Entwicklungsplattform ist VS 2010 Pro unter Windows 7.

Problem

Wir sind kürzlich dazu übergegangen, diese Anwendung auf mehreren Betriebssystemen zu testen. Die Anwendung läuft auf Win 7 auf mehreren Win7-Rechnern, einige für die Entwicklung andere nicht. Das Problem ist, wenn wir die Anwendung unter Vista ausführen. Wenn die Anwendung zum ersten Mal versucht, eine Datei abzuspielen, nachdem sie geöffnet wurde, wird ein Fehler ausgegeben

Es tut dies die meiste Zeit, aber nicht immer, und ich war nicht in der Lage, ein Muster für die paar Male zu etablieren, die den Fehler nicht verursacht haben. Darüber hinaus tut es dies nur für die erste Datei, die es nicht für nachfolgende Dateien abspielt. Und es entzieht sich Try Catch für die Fehlerbehandlung.

Forschung

Ich habe zu diesem Thema eingehend geforscht. Ich habe festgestellt, dass es scheint, andere Media Player und Websites zu plagen, sogar WMP auf einigen Computern. Einige Artikel verweisen auf bestimmte Windows KB-Updates, andere empfehlen, eine Reparaturdiskette auszuführen, um möglicherweise fehlerhafte DLLs zu reparieren. Ich habe viele davon erfolglos versucht, da das Problem auf den beiden Vista-Rechnern, mit denen ich testen muss, weiterhin besteht.

Code

Hier ist die Methode, die aufgerufen wird, wenn dieser Fehler auftritt %Vor%

Zweck

Ich hoffe, einen Weg zu finden, diese Ausnahme durch Code, potentielle Vorschau oder Sniping zu behandeln, wenn es von einem der .NET-Steuerelemente, die ich verwende, geworfen wird. Ich würde lieber mit dem Code umgehen, wenn möglich. Wenn jemand weitere Informationen zu diesem spezifischen Fehler hat, wäre das ebenfalls willkommen.

Auflösung

Mit Kredit an Jornare für die Informationen und in die richtige Richtung drücken werde ich meine Entschließung erklären, und der Code dahinter, hoffe es hilft.

Zuerst musste ich die empfohlene Antwort auf verschiedene Arten modifizieren. Die folgenden zwei Zeilen werden in der Klasse deklariert, die die playSelected-Methode oben aufruft.

%Vor%

Sie sehen das Hinzufügen der Const-Variablen mit dem Namen SEM_FAILCRITICALERRORS. Dies ist erforderlich, um den Wert der Variablen auf 1 zu setzen. In diesem Fall ist der Name der Variablen sehr spezifisch, da er einem Flag-Var-Namen im SetErrorMode entspricht Methode, wenn dieses Flag gesetzt ist, verhindert CriticalErrors die Anzeige. Ich habe auch die .dll ext zum Lib-Aufruf hinzugefügt, obwohl es möglicherweise nicht notwendig ist.

Unten ist meine neue playSelected-Methode

%Vor%

jetzt ist das wichtig! Anfangs setze ich SetErrorMode nach dem Aufruf von ctlcontrols.play zurück auf den altenErrMode, aber das hat den Fehler nicht verhindert. Ich stellte meinen VS im Debug-Modus auf meiner win7-Maschine ein und schritt Zeile für Zeile durch den Code. Ich habe festgestellt, dass der Code nicht wirklich versucht hat, die Datei abzuspielen, bis das Sub-Ende beendet ist. Aus diesem Grund sehen Sie die Timer-Anrufe. Ich habe einen 2-Sekunden-Timer eingestellt, um mir einen Puffer zu geben, damit er den Spielvorgang mit korrekt eingestelltem Fehlermodus starten kann. Unten ist der Code, den ich für das abgelaufene Timer-Ereignis verwendet habe

%Vor%

Ein letzter Vorbehalt werde ich dafür geben. Dieser Prozess verhindert meines Erachtens, dass kritische Fehler angezeigt werden. Seien Sie also vorsichtig. In meinem Fall konnte ich keinen spezifischen Fehler oder eine Systeminstabilität durch den ausgelösten Fehler finden. Daher deaktiviere ich diese Funktion vorübergehend, um die Benutzerfreundlichkeit des Programms zu erhöhen. Ich empfehle nicht, dies jedes Mal, wenn Sie einen Systemfehler haben, so oft zu machen, dass dieser Fehler auf einen Fehler / Fehler im Programm zeigt, der behoben werden sollte. Darüber hinaus sollten Sie meines Erachtens niemals kritische Fehler dauerhaft ausschalten müssen, dh Sie sollten sie nach dem Beenden wieder einschalten. Ich hoffe, diese Informationen helfen und schätzen die Zeit und das Wissen derjenigen, die die Frage beantwortet oder hochgestimmt haben.

    
Madullah 05.04.2012, 19:27
quelle

1 Antwort

2

Von dem, was ich im Netz finde, könnte es durch ein fehlerhaftes WMP-Plugin, Codek oder Display-Treiber verursacht werden. Außerdem sollten Sie in der Lage sein, diesen Fehler zu unterdrücken, indem Sie die Windows-API-Funktion SetErrorMode (SEM_FAILCRITICALERRORS) aufrufen, bevor WMP mit dem Laden der Mediendatei beginnt.

Also, für Vb etwas wie:

%Vor%

Ich habe das nicht getestet, also lassen Sie mich wissen, ob das hilft.

    
jornare 15.04.2012, 19:22
quelle