20. oktober 2008 - 20:52Der er
30 kommentarer og 1 løsning
Behandle tekst returneret ved anvendelse af programmer som i CMD
Hej eksperter,
Hvordan kan jeg anvende teksten returneret af programmer som f.eks. CMD udskriver data fra ipconfig.exe, ping.exe, format.exe osv. i prompten? Jeg tænker primært på at udskrive resultatet af et kald til Valves compiler-tools til TextFields på en Form. PS: Har fænomenet (at programmer returnerer tekst eller anvendelsen af denne) et navn?
ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "ping"; psi.Arguments = "192.168.0." + no; psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.RedirectStandardOutput = true; Process p = Process.Start(psi); StreamReader sr = p.StandardOutput; string line; while((line = sr.ReadLine()) != null) { res += line; } sr.Close(); p.Close(); } public string Res { get { return res; } }
Synes godt om
Slettet bruger
20. oktober 2008 - 23:02#3
Mange tak :) Jeg skriver snarest tilbage.
Synes godt om
Slettet bruger
20. oktober 2008 - 23:25#4
Jeg har lige et andet (kort) spørgsmål, om jeg må stille det her... Jeg får denne fejl, når jeg forsøger at redigere i registreringsdatabasen: 'Der kan ikke skrives til registreringsdatabasenøglen' Hvad skyldes dette, og hvordan undgår jeg problemet?
Jeg skal have de grundlæggende ting ved min applikation til at fungere, inden jeg kan implementere brugen af kommunikation med de eksterne processer.
Synes godt om
Slettet bruger
20. oktober 2008 - 23:27#5
Problem løst! Jeg skulle bare angive, at jeg også ville have write-rettigheder. Jeg vender frygteligt tilbage, når jeg er klar til at implementere det sidste (nok i morgen).
Synes godt om
Slettet bruger
21. oktober 2008 - 19:42#6
Det ser godt nok enkelt ud! Jeg bliver hele tiden overrasket over, hvor godt C# er udført. Anyway: Hvad gør jeg, hvis det kaldte program afvikles MEGET langsomt? Jeg vil nemlig IKKE have, at "værtsprogrammet" (det jeg skriver) ikke svarer og kun opdateres, når det modtager input. Kan jeg lave en form for pauser mellem indlæsning af data fra det kaldte program?
Tak! Hvad sker der med den nye tråd, hvis jeg terminerer den oprindelige process? Og hvad sker der med det kaldte program? Og hvad sker der, hvis jeg terminerer det kaldte program før min applikation?
Lidt afhaengig af hvordan du lukker vil du lukke alle traade eller vente til alle traade er afsluttet.
Det andet program er en ekstern process og vil koere videre, men kan faa fejl paa at skrive output.
Synes godt om
Slettet bruger
22. oktober 2008 - 13:25#19
Fint! Mange tak for hjælpen - jeg skriver lidt.
Synes godt om
Slettet bruger
22. oktober 2008 - 13:54#20
Okay... Det virkede vist i første forsøg! Her er koden:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
using System.Diagnostics; using System.IO; using System.Threading;
namespace OSC { public partial class Form_Log : Form { private String Log = ""; private Thread CompilerThread; private delegate void UpdateLogHandler();
public Form_Log() { InitializeComponent(); CompilerThread = new Thread(new ThreadStart(CompilerLoop)); CompilerThread.Start(); }
Jeg har dog et problem: Outputteksten indeholder ingen linjeskift, og jeg har allerede sat min TextBox til Multline=true og AcceptsReturn=true. Hvad er der galt?
Synes godt om
Slettet bruger
22. oktober 2008 - 13:55#21
Den oprettede tråd afslutter sig selv ved enden af koden, right?
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.