I Windows Systemprogrammering med C ++ og .NET, hvordan laver jeg en System.Diagnostics :: Process.Start () -opkald og har den output i originalvinduet?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle ret grundlæggende C + + kode:


#include <iostream>
#include <string.h>

#include <msclr/marshal\_cppstd.h>
#using <mscorlib.dll>
#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;
using namespace msclr::interop;

int main(int argc, char *argv[])
{
    Process myprocess;
    ProcessStartInfo^ proc1 = gcnew ProcessStartInfo;

    std::cout << "Hello World!" << std::endl;

    proc1->FileName = gcnew String("dir");
    myprocess.StartInfo = proc1;
    myprocess.StartInfo->CreateNoWindow = true;
    myprocess.Start();

    system("pause");

    return 0;
}


Når jeg kører denne kode, udføres den 'dir' kommandoen i et nyt vindue og lukker så hurtigt vinduet.


Mit spørgsmål er enkelt: Hvordan kan jeg få output fra denne proces rettet ind i det samme originale vindue, hvor 'Hello World' vises?


Her er et relevant link, der beskriver System.Diagnostics :: Process () klassen jeg bruger: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx[3]


Mange tak på forhånd for din tid og overvejelse.


Rediger/Opdatering:


Det er blevet foreslået mig at prøve at ændre StartInfo egenskaberne til:


myprocess.StartInfo->CreateNoWindow = true;
myprocess.StartInfo->RedirectStandardOutput = true;
myprocess.StartInfo->UseShellExecute = false;


At gøre dette ser ud til at give mig ingen output overhovedet.

Bedste reference


Som standard bruger Process.Start () ShellExecute. Også CreateNoWindow er mere som 'løsrevet' end 'brug forældrenes konsol'.


Problemet er, at forsøget forsøger at pakke både ShellExecute og CreateProcess.


Sluk CreateNoWindows.
Sluk for UseShellExecute.


Sprøjt ikke med standardhåndtagene, medmindre du vil omdirigere.

Andre referencer 1


Brug RedirectStandardOutput-egenskaben i klassen ProcessStartInfo. Det er så skrevet til Process.StandardOutput.