Avatar billede chrisrj Forsker
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? :)
Avatar billede arne_v Ekspert
02. marts 2021 - 14:39 #1
Skulle:

p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);

vaere:

p.OutputDataReceived += cmd_DataReceived;

?
Avatar billede chrisrj Forsker
02. marts 2021 - 15:00 #2
Muligvis, men det ændre desværre ikke på outputtet. :-/
Avatar billede arne_v Ekspert
02. marts 2021 - 15:18 #3
Skriver den noget ud?
Avatar billede chrisrj Forsker
02. marts 2021 - 15:27 #4
Ja, på skærmen gør den. Men ikke i loggen.
Avatar billede arne_v Ekspert
02. marts 2021 - 15:58 #5
WriteLog(strOutput);

eller

WriteLog("Serial: " + strSerialnumber);

eller begge?
Avatar billede chrisrj Forsker
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.
Avatar billede chrisrj Forsker
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 :)
Avatar billede arne_v Ekspert
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)
Avatar billede chrisrj Forsker
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. ;)
Avatar billede chrisrj Forsker
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester