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

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

vaere:

p.OutputDataReceived += cmd_DataReceived;

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

eller

WriteLog("Serial: " + strSerialnumber);

eller begge?
chrisrj Seniormester
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.
chrisrj Seniormester
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 :)
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)
chrisrj Seniormester
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. ;)
chrisrj Seniormester
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
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.

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





Premium
Microsoft opgiver milliardkøb af gamer-chatplatform med tusindvis af danske brugere
I marts forlød det, at Microsoft var svært interesseret i at købe chatplatformen Discord for over 10 milliarder dollar. Men planen er tilsyneladende gået i vasken.
Computerworld
Nu er de her: Efter flere års rygter lancerer Apple Airtags
Langt om længe kan du købe Apples Airtags. De kan modstå støv og vand, og samtidig gør de det muligt for millioner af iPhone-brugere at hjælpe dig med at finde dine nøgler.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
White paper
Udnyt ressourcerne bedre og skru op for overskuddet
Spildt arbejde, ineffektive processer og ringe forretningsindsigt er blot tre tegn på ringe ressourceudnyttelse. I dette whitepaper får du viden om, hvordan du måler ressourceudnyttelsen – og bruger indsigten operationelt, taktisk og strategisk.