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
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
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";
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
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
Du könntest Dir ja mal die Outputs ausgeben lassen. Im Moment vermute ich das da jemand auf eine Eingabe von Dir wartet
Ist denn ADB auch da wo du es erwartest?
Google hat ja das eine oder andere geändert in den letzten SDK versionen.
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.
Hallo,
in manchen Fällen ist es notwendig das "Arbeitsverzeichnis" zu setzen...
ProcessStartInfo.WorkingDirectory-Eigenschaft
Gruß
Steffen
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
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.