chrisrj Seniormester
22. februar 2021 - 15:32 Der er 12 kommentarer og
1 løsning

Korrekt rækkefølge af kommandoer i CMD

Hejsa

Jeg laver et konsol program som skal udfører en række kommandoer i korrekt rækkefølge.

Men den metode jeg bruger nu, virker ikke.

Funktionen jeg bruger pt.:
private static void cmdCommand(string adbCommand)
        {
         
            if (adbCommand != "")
            {
                ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
                cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
                cmdStartInfo.RedirectStandardOutput = true;
                cmdStartInfo.RedirectStandardError = true;
                cmdStartInfo.RedirectStandardInput = true;
                cmdStartInfo.UseShellExecute = false;
                cmdStartInfo.CreateNoWindow = true;

                Process cmdProcess = new Process();
                cmdProcess.StartInfo = cmdStartInfo;
                cmdProcess.ErrorDataReceived += cmd_Error;
                cmdProcess.OutputDataReceived += cmd_DataReceived;
                cmdProcess.EnableRaisingEvents = true;
                cmdProcess.Start();
                cmdProcess.BeginOutputReadLine();
                cmdProcess.BeginErrorReadLine();
           
                cmdProcess.StandardInput.WriteLine(adbCommand);   
            }

        }
chrisrj Seniormester
22. februar 2021 - 15:34 #1
...og så glemte jeg afslutningen. :D

Den kaldes således:
cmdCommand("adb devices");
osv.

Håber der er godt svar at få! :D
arne_v Ekspert
22. februar 2021 - 15:46 #2
Mit bud:

cmdStartInfo.RedirectStandardOutput = true;
...
cmdProcess.StandardInput.WriteLine(adbCommand);   

->

cmdStartInfo.RedirectStandardOutput = false;
cmdStartInfo.ArgumentList>Add("/c");
cmdStartInfo.ArgumentList>Add(adbCommand);
arne_v Ekspert
22. februar 2021 - 15:46 #3
.Add ikke >Add
chrisrj Seniormester
22. februar 2021 - 15:52 #4
Hmmm...den vil ikke genkende ArgumentList?
arne_v Ekspert
22. februar 2021 - 16:04 #5
.NET Core / .NET 5 ting

Proev:

cmdStartInfo.Arguments = "/c " + adbCommand;

(bemaerk mellemrun)
chrisrj Seniormester
22. februar 2021 - 16:08 #6
Hmmm...der kommer fejl, hvis jeg beholder de mellemliggende linier.

Hvis jeg udkommentere dem, sker der ikke noget?

Ny kode:
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
                cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
                cmdStartInfo.RedirectStandardOutput = false;
/*
                cmdStartInfo.RedirectStandardError = true;
                cmdStartInfo.RedirectStandardInput = true;
                cmdStartInfo.UseShellExecute = false;
                cmdStartInfo.CreateNoWindow = true;

                Process cmdProcess = new Process();
                cmdProcess.StartInfo = cmdStartInfo;
                cmdProcess.ErrorDataReceived += cmd_Error;
                cmdProcess.OutputDataReceived += cmd_DataReceived;
                cmdProcess.EnableRaisingEvents = true;
                cmdProcess.Start();
                cmdProcess.BeginOutputReadLine();
                cmdProcess.BeginErrorReadLine();
*/

                cmdStartInfo.Arguments = "/c " + adbCommand;
arne_v Ekspert
22. februar 2021 - 16:19 #7
Jeg fumler vist rundt.

Det er  naturligvis cmdStartInfo.RedirectStandardInput som skal vaere false ikke output.
chrisrj Seniormester
22. februar 2021 - 16:37 #8
Nu kommer der i hvert fald output igen. :)

Og det virker også som om den kører kommandoerne.

Men de bliver stadig "tæsket" af sted.

De skulle gerne kører HELT færdige før den næste sættes igang.
chrisrj Seniormester
22. februar 2021 - 16:41 #9
Hvis man nu kunne gøre det sådan, at den venter på outputtet kommer tilbage, så ville det nok være bedst.

Pt. har jeg denne funktion til at udskrive det til konsolen:
static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
        {
            //Console.WriteLine("Output from other process");
            if (!e.Data.Contains("Microsoft"))
            {
                Console.WriteLine("ADB output: " + e.Data);
            }
        }
arne_v Ekspert
22. februar 2021 - 17:09 #10
WaitForExit metoden?
chrisrj Seniormester
22. februar 2021 - 17:14 #11
Lol, så fyrer den kun een kommando af. :D
arne_v Ekspert
22. februar 2021 - 20:00 #12
Nu har jeg eksperimenteret lidt og det her virker:


using System;
using System.Diagnostics;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            for(int i = 0; i < 3; i++)
            {
                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "cmd";
                psi.Arguments = "/c cd";
                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("*");
               
            }
            Console.ReadKey();
        }
    }
}
chrisrj Seniormester
22. februar 2021 - 20:08 #13
Awesome! Det ser sgu ud til at virke! :) :)

Du får et mega vådt - og virtuelt - smækkys lige på trutten! :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
Efter vanskeligt år jagter aarhusianske Mjølner nu tocifrede vækstrater: Vil for alvor indtage Sjælland - her er planen
Interview: Efter et corona-plaget år er aarhusianske Mjølner Informatics nu klar til at trykke på speederen. Topchef Brian Gottorp Jeppesen forventer tocifrede vækstrater, der især skal hentes fra det sjællandske marked. Se hans plan for 2021 her.
Computerworld
Næste uge går det løs: Apple inviterer til event på utraditionel vis
Apples store event i næste uge blev afsløret af Siri før tid. Få overblik over, hvad Apple ventes af løfte sløret for.
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
Salesforce er blevet populær hos IT-kriminelle – luk sikkerhedshullerne før det går galt
Mange bygger en stor del af deres IT-strategi på Salesforce, men glemmer at sikre cloudplatformen. Læs her, hvordan du forebygger ødelæggende angreb og kritiske datatab.