02. marts 2021 - 12:09
Der er
10 kommentarer
Console app - log skriver ikke alt?
Hejsa Jeg laver en console app, hvor jeg bla. skal logge alt. Jeg udfører adb kommandoer - disse kald logges fint, men resultatet af dem kommer ikke i loggen. :-/ Min kode: // udfører kommandoer private static void cmdCommand(string adbCommand) { if (adbCommand != "") { WriteLog(adbCommand); Console.WriteLine("CMD: " + adbCommand); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "cmd"; psi.Arguments = "/c " + adbCommand; psi.UseShellExecute = false; Process p = new Process(); p.StartInfo = psi; p.EnableRaisingEvents = true; p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data); p.Start(); p.WaitForExit(); Console.WriteLine("*"); } } // logger kommando feedback - VIRKER IKKE static void cmd_DataReceived(object sender, DataReceivedEventArgs e) { string strOutput; strOutput = "ADB output: " + e.Data; WriteLog(strOutput); if (!e.Data.Contains("Microsoft")) { Console.WriteLine(strOutput); } if (strSerialnumber == "" && e.Data.Length == 20) { strSerialnumber = e.Data; WriteLog("Serial: " + strSerialnumber); } } // logger kommando feedback - VIRKER IKKE static void cmd_Error(object sender, DataReceivedEventArgs e) { Console.WriteLine("Error:"); WriteLog("Error:"); Console.WriteLine(e.Data); WriteLog(e.Data); } Er der nogen der har et bud på en løsning? :)
Annonceindlæg fra Infor
02. marts 2021 - 14:39
#1
Skulle: p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data); vaere: p.OutputDataReceived += cmd_DataReceived; ?
02. marts 2021 - 15:00
#2
Muligvis, men det ændre desværre ikke på outputtet. :-/
02. marts 2021 - 15:18
#3
Skriver den noget ud?
02. marts 2021 - 15:27
#4
Ja, på skærmen gør den. Men ikke i loggen.
02. marts 2021 - 15:58
#5
WriteLog(strOutput); eller WriteLog("Serial: " + strSerialnumber); eller begge?
02. marts 2021 - 16:12
#6
Så simpelt kan man ikke sætte det op. :) Jeg ser aldrig WriteLog("Serial: " + strSerialnumber); Kommandoerne der køres: GetSerialNumber(); cmdOpenExplorer(); Console.WriteLine("ADB Serial number: " + strSerialnumber); Koden til de to funktioner: private static void GetSerialNumber() { WriteLog("Get serial"); cmdCommand("adb shell getprop ro.serialno"); } private static void cmdOpenExplorer() { if (strFileName != "") { string strLogAction = "Open Folder in explorer"; WriteLog(strLogAction); Console.WriteLine("CMD: " + strLogAction); System.Diagnostics.Process.Start("explorer.exe", @Environment.CurrentDirectory); Console.WriteLine("*"); } } Dette er output på skærm: CMD: Open Folder in explorer * ADB Serial number: CMD: adb shell getprop ro.serialno 87681f28683700000000 Og i loggen: 02-03-2021 16:07:12 Open Folder in explorer 02-03-2021 16:07:12 Get serial 02-03-2021 16:07:12 adb shell getprop ro.serialno Det er bare et eksempel, andre funktioner giver andet output som igen kun ses på skærmen.
05. marts 2021 - 13:28
#7
Hvadøhm...kom livet i vejen, eller er problemet virkeligt for svært for landets bedste c# geni? :O :)
05. marts 2021 - 19:43
#8
Problemet er lidt svaert at overskue. Kunne du proeve: if (strSerialnumber == "" && e.Data.Length == 20) -> Console.WriteLIne("sn={0} data={1} len={2}", strSerialnumer, e.Data, e.Data.Length); if (strSerialnumber == "" && e.Data.Length == 20)
05. marts 2021 - 19:55
#9
Tja, den kommer så ikke ud til skærmen...! Det overrasker nok mig lige så meget som det gør dig? :) Og ja, stavebøffer er rettet. ;)
06. marts 2021 - 00:33
#10
Nå, så fik jeg fedtet lidt med det selv. Det her ser ud til at virke: private static void cmdCommand(string adbCommand) { if (adbCommand != "") { WriteLog(adbCommand); Console.WriteLine("CMD: " + adbCommand); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "cmd"; psi.Arguments = "/c " + adbCommand; psi.UseShellExecute = false; Process p = new Process(); p.StartInfo = psi; p.EnableRaisingEvents = true; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.Start(); StreamReader srOutput = p.StandardOutput; StreamReader srError = p.StandardError; string strOutput = srOutput.ReadToEnd(); string strError = srError.ReadToEnd(); if (strOutput != "") { Console.WriteLine("ADB output: " + strOutput); WriteLog(strOutput); } if (strError != "") { Console.WriteLine("ADB error: " + strError); WriteLog(strError); } p.WaitForExit(); Console.WriteLine("*"); } } Ikke så pænt, but it works. :D
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.