Laden...

Process startet nicht (Leere Konsole öffnet sich)

Erstellt von xFL0 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.716 Views
X
xFL0 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren
Process startet nicht (Leere Konsole öffnet sich)

Hey Leute,
ich hab ein Problem und zwar:

Ich starte eine Exe mit Argumenten mit folgender Methode:

        public void startADB(string sParameter, out string sOutput)
        {

            Process adb = new Process();
            adb.StartInfo.FileName = @"Tools/adb/adb.exe";
            adb.StartInfo.Arguments = sParameter;
            adb.StartInfo.UseShellExecute = false;
            adb.StartInfo.RedirectStandardOutput = true;
            adb.Start();
            string sConsoleOut = adb.StandardOutput.ReadToEnd();
            adb.WaitForExit();
            sOutput = sConsoleOut;
        }

Bis heute hat dass auch immer ganz gut funktioniert,
nur jetzt öffnet sich aufeinmal nur noch eine leere Konsole,
diese bleibt ein paar Sekunden offen und dann schließt sie sich wieder
und das Programm friert ein.
Wenn ich es dann beende ist im Taskmanager noch eine Adb.exe offen.

An der Exe und dem Pfad dürfte es nicht liegen,
da die Exe alleine auch funktioniert und das ganze ja schon einmal lief.

Könnt ihr mir helfen ?

LG Flo

T
156 Beiträge seit 2012
vor 10 Jahren

Hallo xFlo,

wirklich eine Idee habe ich hier nicht.
Was mir aber auffällt ist die Schreibweise des FileName mit Slashes statt Backslashes, wie man es eigentlich gewöhnt ist.

Das hat so funktioniert?

Gruß, telfa

X
xFL0 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hab ich gerade nochmal geändert aber auch mit Backslashes tut sich nichts !
jetzt ist die schreibweise so:

adb.StartInfo.FileName = @"Tools\adb\adb.exe";
49.485 Beiträge seit 2005
vor 10 Jahren

Hallo xFL0,

ein relativer Pfad ist wackelig. Wenn jemand dein Programm mit einem anderen Arbeitsverzeichnis gestartet wird, klappt es nicht. Verwende besser [FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln und Path.Combine.

Dass deine Anwendung einfriert ist bei WaitForExit kein Wunder, zumindest wenn der Aufruf aus dem GUI-Thread passiert. Da ist sowas nicht erlaubt, siehe [FAQ] Warum blockiert mein GUI? Verwende besser das Process.Exited-Ereignis.

Warum das Programm nicht (mehr) läuft, kann viele Gründe haben, im Grunde fast alles aus [FAQ] Programm läuft in anderer Umgebung nicht (richtig).

herbivore

X
xFL0 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Also hab jetzt mal das mit Path.Combine und Application.StartupPath gemacht.
Außerdem das WaitForExit rausgenommen. Immernoch das selbe leider ! 😦

Noch jemand ne Idee ?

LG
xFL0

156 Beiträge seit 2010
vor 10 Jahren

Du könntest Dir ja mal die Outputs ausgeben lassen. Im Moment vermute ich das da jemand auf eine Eingabe von Dir wartet

F
10.010 Beiträge seit 2004
vor 10 Jahren

Ist denn ADB auch da wo du es erwartest?

Google hat ja das eine oder andere geändert in den letzten SDK versionen.

X
xFL0 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

naja im Prinzip gibt das Ding nichts aus !

Ich rufe die adb.exe mit dem Parameter "devices" auf.

Jedoch öffnent sich die Exe nicht !

Nur das leere Konsolenfenster.

Ich denke nicht das es an der Exe liegt, weil wenn ich diese direkt verwende (mit cmd)
dann funktioniert es auch.

Es hat ja bereits funktioniert aber das tut es jetzt plötzlich nicht mehr.

S
322 Beiträge seit 2007
vor 10 Jahren

Hallo,

in manchen Fällen ist es notwendig das "Arbeitsverzeichnis" zu setzen...
ProcessStartInfo.WorkingDirectory-Eigenschaft

Gruß
Steffen

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo xFL0,

Arbeitsverzeichnis

wobei das ja schon in [FAQ] Programm läuft in anderer Umgebung nicht (richtig) genannt wird. Ich hoffe doch, dass du die dort genannten Ursachen gründlich durchgegangen bist und ausgeschlossen hast.

herbivore

X
xFL0 Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Hab jetzt mal das Working Directory wie folgt gesetzt:

public void startADB(string sParameter, out string sOutput)
        {
            Process adb = new Process();
            adb.StartInfo.WorkingDirectory = Path.Combine(Application.StartupPath, @"Tools\adb\");
                adb.StartInfo.FileName = Path.Combine(Application.StartupPath, @"Tools\adb\adb.exe");
                adb.StartInfo.Arguments = sParameter;
                adb.StartInfo.UseShellExecute = false;
                adb.StartInfo.RedirectStandardOutput = true;
                adb.Start();
                string sConsoleOut = adb.StandardOutput.ReadToEnd();
                sOutput = sConsoleOut;
        }

Leider immer noch keine Besserung !

Das Programm zeigt keine Reaktion mehr ab der Zeile:

string sConsoleOut = adb.StandardOutput.ReadToEnd();

Wenn ich den Prozess mir mal genauer vorknöpfe kann ich folgende Fehlermeldungen im adb Objekt beim Debuggen erkennen:> Fehlermeldung:

MainModule = "adb.MainModule" hat eine Ausnahme vom Typ "System.ComponentModel.Win32Exception" verursacht.
MaxWorkingSet = "adb.MaxWorkingSet" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.
MinWorkingSet = "adb.MinWorkingSet" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.