Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pristup konzolnoj aplikaciji iz .net windows aplikacije

[es] :: .NET :: Pristup konzolnoj aplikaciji iz .net windows aplikacije

[ Pregleda: 2812 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Pristup konzolnoj aplikaciji iz .net windows aplikacije27.04.2008. u 14:25 - pre 194 meseci
Ovako, razvijam GUI za šah i želio bih integrirati neki od open source engina, radi analiza pozicija, treniranja i sl.Za oko mi je zapeo moćan open source engine Crafty, koji se u biti vrti kao konzolna aplikacija i taj engine se na sve nemoguće i moguće načine može podesiti i iskoristiti iz konzole. Ja bih želio taj engine pokrenuti kao proces iz koda(C#), tj. iz Windows aplikacije i upravljati odande njime razmjenom stringova, tj. trebao bih poslati string u njegovu konzolu i trebao bih imati mogućnost string koji on vrati kao odgovor dohvatiti iz svoje Win. aplikacije.Neki ljudi su mi preporučili anonymous pipes komunikaciju, ali mi na žalost nisu znali objasniti konkretnije kako tu komunikaciju ostvariti.Tražio sam po MSDN-u , uspio sam dobiti da mi se string pojavi u konzoli od engine-a ali to je i sve, nijednu naredbu engine-a nisam uspio pokrenuti iz Win aplikacije.Zna li neko kako riješiti taj problem?
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije27.04.2008. u 21:08 - pre 194 meseci
Baš i ja radim nešto slično
Code:
using System;
using System.IO;
using System.Diagnostics;

class Program
{
    static void Main ( string [] args )
    {
        ProcessStartInfo pi = new ProcessStartInfo ( "aaa.exe", "ovdje dođu argumenti" );
        pi.WindowStyle = ProcessWindowStyle.Hidden;
        pi.RedirectStandardOutput = true;
        pi.UseShellExecute = false;
        Process p = Process.Start ( pi );
        p.WaitForExit ();
        p.Start ();
        TextReader t = p.StandardOutput;
        string s;
        s = t.ReadToEnd () ;
        Console.WriteLine ( s );
    }
}

Uglavnom aplikacija radi kad čita i piše tekst ali ako naiđe na console.ReadLIne () onada nevalja
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije27.04.2008. u 21:08 - pre 194 meseci
using System;
using System.IO;
using System.Diagnostics;

class Program
{
static void Main ( string [] args )
{
Process p = new Process ();
String s;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "gnugo.exe";
p.StartInfo.Arguments = "--mode gtp";
p.Start ();
StreamReader reader = p.StandardOutput;
StreamWriter writer = p.StandardInput;
writer.AutoFlush = true;
writer.WriteLine ( "1 boardsize 7" );
s = reader.ReadToEnd ();
Console.WriteLine ( s );
}
}
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije27.04.2008. u 21:11 - pre 194 meseci
OTKRIO - umijesto ReadToEnd ubaci ReadLine. Meni je rješilo problem.
 
Odgovor na temu

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije27.04.2008. u 22:28 - pre 194 meseci
Meni ne radi uopće.Ako imas vremena daj probaj napraviti komunikaciju s tim mojim engineom, imas u attachu.
Prikačeni fajlovi
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 08:08 - pre 194 meseci
Tebi se dešava da ti se ništa ne prikazuje zbog praznih linija i nailaženja na Console.ReadLIne() odnosno scanf () u Crafty enginu. malo se igraj pa ćeš vidit
Code:
using System;
using System.IO;
using System.Diagnostics;

class Program
{
    static void Main ( string [] args )
    {
        Process p = new Process ();
        string s;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "Crafty.exe";//stavi Crafty.exe u direktorij di ti je program
        p.Start ();
        StreamReader reader = p.StandardOutput;
        StreamWriter writer = p.StandardInput;
        writer.AutoFlush = true;
        s = reader.ReadLine ();
        while ( ( s = reader.ReadLine() ) != "" )
        {
            Console.WriteLine ( s );
        }
        s = reader.ReadLine ();
        s = reader.ReadLine ();
        writer.WriteLine ( "blabal" );
        s = reader.ReadLine ();
        Console.WriteLine ( s );
    }
}
 
Odgovor na temu

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 13:59 - pre 194 meseci
Proradilo je i naznake su da ću uspjet skockat sve kako sam htio.Puno hvala na pomoći.
 
Odgovor na temu

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 15:40 - pre 194 meseci
Naišo sam na jedan čudan slučaj, čini mi se da je bug u pitanju: Kada pomoću StreamReadera i metode ReadLine() učitavam red po red sa streama, (Crafty engine) jedno vrijeme sve radi dobro , tj. tako dugo dok ne učita početnu poruku enginea, a zatim program jednostavno zablokira na pozivu metode reader.ReadLine().
Probao sam pokušati iz Debuggera, no stvar je ista, nije bitno da li izlaz smjestim u neku varijablu npr. s = reader.ReadLine() ili samo na ključnoj liniji pozovem reader.ReadLine(), stvar je ista, program zablokira bez ikakvog upozorenja.Jesi li imao sličan problem?Ista stvar se dogadj i u onom primjeru koji si poslao ovdje, provjeri.
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 15:54 - pre 194 meseci
Misliš program stoji, a karet ( text kursor ) žmiga? To je zato što program čita dok ne naiđe na Console.ReadLine () odnosno scanf() ( valjda je crafty pisan u c-u ). Zato sam ti rekao da ne koristiš ReadToEnd ( to čita sve do kraja) već Console.ReadLine(). Dakle liniju po liniju. Moraš znati kad dolazi linija scanf(). Nju ne smiješ čitati jer će ti se program zablokirat na njoj. Dakle čitaš linjiu po liniju, a kad dođe scanf() onda sa writer.writLine( upišeš tekst). Pa opet onoliku Readline-ova koliko će biti outputa.

C:\ Ovo je 1. output
C:\ Ovo je 2. output
C:\ Ovo je 3. output
C:\
C:\ Ovo je 4. output
C:\ Ovo je 5. output
C:\ Ovo je 6. output

Readline ()
Readline ()
Readline ()
WriteLine()
Readline ()
Readline ()
Readline ()
 
Odgovor na temu

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 15:58 - pre 194 meseci
Mislim da se ne radi o tome, probao sam engine pokrenuti iz win aplikacije i takodje zablokira, sve forme zablokiraju, provjeri.
 
Odgovor na temu

artriba
Split

Član broj: 158342
Poruke: 109
*.adsl.net.t-com.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 16:22 - pre 194 meseci
Recimo ovaj kod upiše 100 različitih naredbi i dobije 100 različitih odgovora, ne zablokira nikad ( P.S. ispiše do 90 jer prvih 10 probadne na intro ( Crafty poruke kad se inicijalizira). Pošalji mi točne naredbe, da probam sa njima.
Code:
class Program
{
    static void Main ( string [] args )
    {
        Process p = new Process ();
        string s;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "Crafty.exe";
        p.Start ();
        StreamReader reader = p.StandardOutput;
        StreamWriter writer = p.StandardInput;
        writer.AutoFlush = true;
        int a = 0;
        while ( a < 100 )
        {
            writer.WriteLine ( a );
            s = reader.ReadLine ();
            Console.WriteLine ( s );
            a++;
        }
    }
}
 
Odgovor na temu

oliverhaddo

Član broj: 144508
Poruke: 15
*.dsl.optinet.hr.



Profil

icon Re: Pristup konzolnoj aplikaciji iz .net windows aplikacije28.04.2008. u 16:32 - pre 194 meseci
To razumijem, ali kod mene je problem da meni engine sekvencijalno šalje odgovore i ja ne znam točno koliko linija odgovora ću dobiti, pogotovo pri analizama pozicija, eto zakačih projektić koji ilustrira problem pa pogledaj.(VS 2008).(Ubaci Crafty u bin)
Prikačeni fajlovi
 
Odgovor na temu

[es] :: .NET :: Pristup konzolnoj aplikaciji iz .net windows aplikacije

[ Pregleda: 2812 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.