Hola, pues esta entrada la hago pensando en mi pasado, jejejeje, pues bien en mis comienzos me gustaba crear archivos batch, los cuales me salian interesantes, de todo tipo, pues bien, en esas épocas daba todo por un compilador de batchs a exe, encontre uno que era de paga, se llamaba Quick Batch File Compiler de la empresa abyssmedia, y bueno no conocía Taringa y pasaba horas buscando un serial o un crack(recuerden eso es malo XD). Bueno, pasaron los años, aprendí .NET, y hace poco publique una entrada la cual nos muestra el uso de los servicios de compilación de .NET (VISITAR), y aplicando eso, mas un poco de creatividad me salió una dll la cual tiene lo necesario para compilar .bat a .exe, lo que hubiera dado por algo asi.
Pues bien, lo que hace esta aplicación es generar un código CSharp el cual crea un .bat temporal con el código que le asignemos y que luego lo inicializa, luego que termine su ejecución lo elimina, pues bien averiguando, es la misma forma en como trabaja Quick Batch File Compiler, bueno, el código que se genera es el siguiente:
using System;
using System.IO;
class Tmp {
public static void Main(string[] args) {
string tmpPath = Environment.GetEnvironmentVariable("temp");
// Crea un nombre aleatorio
tmpPath += Path.GetRandomFileName() + ".bat";
// Creamos un batch temporal
Stream arch = File.Open(tmpPath, FileMode.OpenOrCreate);
using (StreamWriter writer = new StreamWriter(arch)) {
writer.Write(@"[BatSource]");
}
arch.Close();
// Iniciar el batch
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = tmpPath;
// Para que no habra otra ventana
p.StartInfo.UseShellExecute = false;
p.Start();
// La aplicacion no continuara mientras la ejecucion
// del bat haya terminado
p.WaitForExit();
// Verificar si existe la ruta del archivo batch
if (File.Exists(tmpPath))
File.Delete(tmpPath);
}
}