Moin,
ich will in C# "externe" Programme über die Process-Class triggern und
deren Ausgabe mitplotten.
Dazu habe ich mir ein Modul geschrieben, dem ich nur den Programmnamen
und die Parameter übergebe.
Die Umleitung des Standard-Error-Streams wird asynchron durchgeführt, um
damit später einen Fortschrittsbalken zu füttern.
Das Problem ist jetzt, dass sich mein Programm mit einer Exeption
("Nullreference"?!) aufhängt, sobald das zweite Programm gestartet
werden soll.
Wo mache ich den Fehler? Ich bin quasi Neueinsteiger in C#, vermute
aber, dass die DataReceivedEventHandler-Zuweisung das Problem ist - Kann
aber auch falsch liegen...
Und bevor Meldungen kommen: "Ohne Code nichts los!"
STK500-Besitzer schrieb:> Und bevor Meldungen kommen: "Ohne Code nichts los!"
Und was ist mit der "UserToStupidToReportErrorException"... ?
Ich denke die genaue Fehlermeldung+Stacktrace könnte schon zur Lösung
beitragen ;)
Ebenso wie du die Klasse aufrufst...
Läubi .. schrieb:> Und was ist mit der "UserToStupidToReportErrorException"... ?> Ich denke die genaue Fehlermeldung+Stacktrace könnte schon zur Lösung> beitragen ;)> Ebenso wie du die Klasse aufrufst...
Aufruf:
1
stringparameter="-i "+"\""+GlobalerName+
2
"\""+" -target dvd -y -b "+Convert.ToString(vbitrate)
Wenn ich den ersten Prozess ("ffmpeg") auskommentiere, funktioniert der
Aufruf des zweiten problemlos.
Deswegen habe ich die "StartProcess" im Verdacht (und gepostet).
Wenn ich den Debugger laufen lasse, meckert er an einer anderen Stelle
rum, un bei den zigtausend Meldungen von ffmpeg zieht sich der ganze
Kram dann noch mehr in die Länge.
>Fehlermeldung+Stacktrace
Das, was im Bericht für Microsoft steht? Guck beim nächsten Absturz.
Daran lag es gar nicht.
Die "NullReferenceExeption" tritt erst in dem Moment auf, wenn die Daten
des stdError-Streams in ein Textfeld geschrieben werden sollten.
Wenn der Prozess endete, wurde der EventHandler noch ein Mal aufgerufen.
Da ist das Objekt aber schon NULL...
Der Ablauf funktioniert also nun problemlos auf meinem Rechner.
Auf einem Zielrechner schmiert das Programm aber regelmäßig ab.
Woran kann das liegen?
Auf beiden Rechnern ist das gleiche .NET-Framework instlliert.
Kann mir da jemand eine Antwort geben? Ich wüsst enicht mal, wonach ich
soll.
Danke im Vorraus!
Du könntest z.B: damit beginnen zu prüfen ob DataReceivedEventArgs
ungleich null sind bevor du voller Optimissmus darauf zugreifst.
Ebenso wäre es sicher nicht verkehrt zu prüfen ob e.Data ungleich null
und ungleich dem leeren String ist.
Wenn allerdings ein Constraint existiert, das diese Werte
niemalsnicht null sein dürfen, solltest du den Bux fixen welcher dazu
führt das hier Nullwerte eingegeben werden ;)
Möglichwerweise (ich hab die API jetzt nicht gelesen) signalisiert
dieses "null" sogar das der Prozess nun beendet wurde...
Hatte ich schon erwähnt, dass genau dieses Problem gelöst ist?
Ich frage inzwischen ab, ob das Objekt NULL ist.
>Schau mal wo dein Objekt Null ist und geh im Debugger durch warum.
Ich habe mir das mal mit dem Debugger angeguckt, aber irgendwie hat der
die Anweisungen alle ignoriert.
Den StackTrace in eine Datei zu schreiben, war dann die Rettung.
Da scheinbar niemand die andere Frage liest, stelle ich sie hier noch
mal:
Auf meinem Entwicklungsrechner funktioniert das Programm wie gewünscht,
auf einem Zielrechner leider nicht.
Woran kann das liegen?
Auf beiden Rechnern ist das geiche .NET-Framwork installiert.
Naja, Du verlässt Dich drauf, dass das p_OutputDataReceived Handling vor
dem Main Thread fertig ist. Eventuell solltest Du den Main Thread mit
einem AutoResetEvent blockieren, welches Du in der Handler Methode
freigibst. Ich kann das Problem nicht nachvollziehen und Dir daher nur
"Cloud" Tips geben ;-).
Es liegt definitiv nicht an meinem Programm, da ein Test an
verschiedenen anderen Computern ergeben hat, dass es wie gewünscht
funktioniert.
Jetzt heisst es also: Programm richtig hübsch machen und Zielrechner für
das Programm anpassen.
bluppdidupp schrieb:> Evtl. je nach Anwenderkreis noch beachten:> http://www.golem.de/1009/77825.html
Genau an dieser Problematik lag es:
Die auszuführenden Dateien und ihre DLL müssen alle mit im gleich
Verzeichnis liegen, sofern sie nicht in der PATH-Systemvaribalen
eingerichtet sind. Das waren sie malo, bis jemand den Rechner
neugestartet hat...