Aquí hay un código de ejemplo que sería más o menos lograr esto, menos la comprobación de errores de ningún tipo. Además, asegúrese de que la licencia del programa que se va a incrustar permita este tipo de uso.
// extracts [resource] into the the file specified by [path]
void ExtractResource(string resource, string path)
{
Stream stream = GetType().Assembly.GetManifestResourceStream(resource);
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, bytes.Length);
File.WriteAllBytes(path, bytes);
}
string exePath = "c:\temp\embedded.exe";
ExtractResource("myProj.embedded.exe", exePath);
// run the exe...
File.Delete(exePath);
La única parte difícil es conseguir el valor correcto para el primer argumento de ExtractResource
. Debe tener el formato "namespace.name", donde el espacio de nombres es el espacio de nombre predeterminado para su proyecto (busque esto en Proyecto | Propiedades | Aplicación | Espacio de nombres predeterminado). La segunda parte es el nombre del archivo, que deberá incluir en su proyecto (asegúrese de establecer la opción de compilación en "Recurso incrustado"). Si coloca el archivo en un directorio, p. Recursos, entonces ese nombre se convierte en parte del nombre del recurso (por ejemplo, "myProj.Resources.Embedded.exe"). Si tiene problemas, intente abrir su binario compilado en Reflector y busque en la carpeta de Recursos. Los nombres enumerados aquí son los nombres que pasaría al GetManifestResourceStream
.
La pregunta es: ¿qué es lo que desea con que "ejecutable externo"? si solo está incrustándolo y sacándolo, cuando "Recurso incrustado" – tofi9
Y si simplemente está 'ejecutándolo y obteniendo su resultado', despliéguelo uno al lado del otro. No es necesario que esté incrustado. Del mismo modo que el archivo Flash, tu _podría simplemente implementarlo con tu programa, si eso es todo lo que realmente necesitas. Sospecho que tienes más ** necesidades ** que no te has molestado en enumerar. :) –