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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.