2012-03-25 15 views
5

Quiero compilar un código C desde C# mediante programación. Lo estoy intentando pero aún no he encontrado ninguna solución. Aquí está mi código.Cómo compilar programáticamente un código c a partir de un código C# utilizando el compilador mingw32-gcc

try { 
    var info = new ProcessStartInfo { 
     FileName = "cmd.exe", 
     Arguments = "mingw32-gcc -o a Test.c" 
    }; 
    var process = new Process { StartInfo = info }; 
    bool start = process.Start(); 

    process.WaitForExit(); 
    if (start) { 
     Console.WriteLine("done"); 
    } 
} catch (Exception) { 
    Console.WriteLine("Not done"); 
} 

estoy usando VS2010 en Windows 7 y he instalado mingw32-gcc y mi variable de entorno para mingw32-gcc es C: \ Archivos de programa \ CodeBlocks \ MinGW \ bin Cualquier ayuda será apreciada. Gracias por adelantado.

+0

Para que nos entendamos el contexto: ¿Qué piensa hacer con el código C resultante? –

+1

¿Qué hay de malo en tu código? – usr

+1

Estoy construyendo un juez en línea basado en Internet para mi proyecto final del semestre. Por lo general, debe haber una opción donde el concursante puede presentar el código allí. Así que tengo que tomar el código enviado y guardarlo en un archivo .c que tener que compilarlo y proporcionar comentarios al concursante. ** He compilado un código c en una aplicación de escritorio en java ** Pero estoy enfrentando un problema en C#. Gracias –

Respuesta

2

No es necesario llamar al programa cmd.exe. Puede llamar directamente al programa mingw32-gcc.exe con argumentos.

Editar:

string szMgwGCCPath = "C:\\mingw32\\bin\\mingw32-gcc.exe"; // Example of location 
string szArguments = " -c main.c -o main.exe"; // Example of arguments 
ProcessStartInfo gccStartInfo = new ProcessStartInfo(szMgwGCCPath , szArguments); 
gccStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
Process.Start(gccStartInfo); 

Saludos

+1

Llamar directamente a mingw32-gcc.exe con argumentos no resolvió mi problema. ¿Puede ser específico? Gracias por responder. Saludos –

+0

@ForhadHussain: ¿puede ser específico con "no resolvió mi problema"? Errores, bloqueos, ¿qué? Grifos tiene razón en que no debes llamar "cmd.exe". – Abel

+0

He editado mi respuesta para dar un ejemplo – grifos

8

Trate

Process process = Process.Start(
     @"C:\Program Files\CodeBlocks\MinGW\bin\mingw32-gcc.exe", "-o a Test.c"); 
+0

Hombre que resolvió mi tiempo. Muchas gracias. –

+0

@YoryeNathan Realmente no llamaría 'mingw32' algo para disfrutar. –

+0

@ ta.speot.is No importa, debe obtener el crédito y las gracias si la respuesta ayudó al OP. – SimpleVar

Cuestiones relacionadas