2016-03-29 16 views
0

ich eine Konsolenanwendung, die eine Funktion zum Erstellen von Dateien unter Verwendung eines SAPI TTS-Engine hat:Access in SAPI stürzen meine Konsole

<HandleProcessCorruptedStateExceptions> Function SpeechFile(Text As String, Folder As String, Voice As String) As String 
    Dim pth = Path.Combine(Folder, Text.GetHashCode & ".wav") 
    If Not File.Exists(pth) Then 
     Using synth = New SpeechSynthesizer 
      Dim fmt = New Speech.AudioFormat.SpeechAudioFormatInfo(8000, Speech.AudioFormat.AudioBitsPerSample.Eight, Speech.AudioFormat.AudioChannel.Mono) 
      synth.SetOutputToWaveFile(pth, fmt) 
      synth.SelectVoice(Voice) 
      Try 
       synth.Speak(Text) 
      Catch ex As Exception 
       ex.Data.Add("Path", pth) 
       ex.Data.Add("Text", Text) 
       Throw ex 'i have no idea why this err isnt logged normally 
      End Try 
     End Using 
    End If 
    Return pth 
End Function 

Der Aufruf von Speak nicht intermittierend mit AccessViolationException. Obwohl ich das Attribut hinzugefügt und den Anruf in eine Try...Catch verpackt habe, stürzt diese Ausnahme die gesamte Konsolenanwendung ab. Ich habe daher keine Möglichkeit, den Absturz oder die Handhabung/das Herunterfahren/Neustarten zu protokollieren.

Mein erster Gedanke war, dass die Engine versuchte, zwei Dateien gleichzeitig zu erstellen, aber das ist nicht der Fall.


Die entsprechenden Windows-Protokolle:

Fehlgeschlagene Anwendung Name: MyConsole.exe, Version: 1.0.0.0, Zeit Stempel: 0x56f8fd6e Fehlgeschlagene Modulname: Moses64.dll, Version: 0.0.0.0 , Zeitstempel: 0x510a6596 Ausnahmecode: 0xc0000005 Fehler Offset: 0x00000000000d03a1 Fehlgeschlagene Prozess-ID: 0x1c10 Fehlgeschlagene Anwendung Startzeit: 0x01d188d7da12cb52 Fehlgeschlagene Anwendung Pfad: C: \ Program Files \ MyConsole \ MyConsole.exe Fehlgeschlagene Modulpfad: C: \ Program Files (x86) \ Aharon \ Hebräisch Speech Synthesizer \ Ron \ Moses64.dll Bericht Id: 0a70f320-f519-11e5-80c3-d05099606348 Fehlgeschlagene Paket voller Name: Fehlgeschlagene Paket-Relativ Anwendungs-ID:

Anwendung: MyConsole.exe Framework Version: v4.0.30319 Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet. Ausnahme Info: System.AccessViolationException bei System.Speech.Synthesis.TtsEngine.ITtsEngine.Speak (System.Speech.Synthesis.TtsEngine.SPEAKFLAGS, System.Guid ByRef, IntPtr, IntPtr, IntPtr) bei System.Speech.Internal .Synthesis.TtsProxySapi.Speak (System.Collections.Generic.List`1, Byte []) um System.Speech.Internal.Synthesis.VoiceSynthesis.SpeakText (System.Speech.Internal.Synthesis.SpeakInfo, System.Speech .Synthesis.Prompt, System.Collections.Generic.List``1) bei System.Speech.Internal.Synthesis.VoiceSynthesis.ThreadProc() bei System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, -System .Threading.ContextCallback, Syst em.Object, Boolean) um System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) um System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext , System.Threading.ContextCallback, System.Object) bei System.Threading.ThreadHelper.ThreadStart()


Wie kann ich umgehen diese Ausnahme, oder besser noch, verhindern, dass es auftritt?

+0

Sollte aus der Stack-Ablaufverfolgung offensichtlich sein, dass diese Ausnahme auf einen Worker-Thread geworfen wird, nicht innerhalb Ihrer SpeechFile() -Methode. Du kannst es also nicht fangen. Sie müssen Ihre Maschine wieder gesund machen. Was das bedeutet, ist unmöglich zu erraten, es erfordert einen nicht verwalteten Debugger. Vermeiden Sie Stimmen von Drittanbietern, versuchen Sie es mit einem anderen Gerät. –

+0

Hallo. danke für deinen Beitrag. Kannst du etwas mehr erklären? Wenn dies bei einem Worker-Thread in einem externen Prozess passiert, warum stürzt meine Konsole ab? Es macht mir nichts aus, dass ihr Motor abstürzt, aber warum bringt es meine Konsole damit runter? Leider habe ich momentan keine Wahl mit dem Motor (aufgrund von Lizenz- und Managemententscheidungen usw.). Alles, was ich brauche, ist, ihren Bug zu ignorieren. Vielen Dank! –

+0

Google "LegacyUnhandledExceptionPolicy". Benutze es nicht. –

Antwort

-1

am Ende war es, weil ich die legacyUnhandledExceptionPolicy in der app.config fehlte.(Aus irgendeinem Grund, warum ich es in eine falsche Datei verloren hatte)

sobald ich es meinem app.config hinzugefügt haben die Ausnahme behandelt wird immer sehr schön

scheint, dass HandleProcessCorruptedStateExceptions selbst ist noch nicht genug

Danke an alle für Ihre Hilfe!