2010-03-04 18 views
7

Sé que es una situación extraña, pero tengo que incrustar un archivo EXE (o el código de ensamblado) en mi proyecto, por lo que solo puede iniciarlo la aplicación (puede 't crea el EXE en el sistema de archivos y lo inicia) ....NET: incrustar un archivo EXE en mi proyecto

¿Es posible?

Editar:

No es un EXE .NET. De todas formas he añadido el archivo Prueba.exe como un recurso para mi proyecto y lo hice

Dim exestr As Stream = Nothing 
    Dim a As Assembly = Assembly.GetExecutingAssembly 
    exestr = a.GetManifestResourceStream("Test.exe") 
+0

Esto no es posible. ¿Por qué estás tratando de hacer esto? – SLaks

Respuesta

2

Estoy pensando en crear un RAM disk, escribir sus archivos exe desde su archivo de recursos .NET, y ejecutar el archivo allí. Nada toca el disco físico.

No tengo un enlace para una API de disco RAM programable pero es probable que encuentre algo para manipular desde su programa. El otro beneficio es que los escáneres de virus aún pueden reconocerlo por seguridad.

También estoy pensando si su aplicación se está ejecutando en el disco, entonces no hay una buena razón por la que el ejecutable en cuestión no puede estar en el disco también. Si lo está conectando a través de la red (descargando) o algo así, entonces primero guarde en el disco y bórrelo cuando haya terminado la ejecución.

+0

gracias, intentaré eso, esperando que funcione ... De todos modos, no quiero escribir y abrir el archivo porque los usuarios no deben copiar el segundo exe y lo inicia cuando lo desean. – Marcx

+0

¿Al final fue una solución de disco RAM? Sólo curioso. Si es así, ¿qué software usaste para implementarlo? –

+0

Creo que el problema con esto es que los discos RAM requieren un software de terceros ya instalado. Que si puedes hacer eso, ¿por qué no puedes escribir en el sistema de archivos? – jcmcbeth

4

Si el EXE es un ensamblado de .NET, puede incrustar el binario compilado en su programa (exterior), cargarlo utilizando Assembly.Load(byte[]). EDITAR: Como no es así, no puede.

Después de cargar el conjunto, puede llamar a funciones del conjunto interno (como el método Main) como cualquier otro conjunto, o puede escribir AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName).

+0

actualizó la primera publicación ... el exe no es .Net exe ... – Marcx

+0

Guardaré esta respuesta como referencia. – SLaks

+0

+1 para la información útil. – si618

5

No es posible. Esta fue una decisión de diseño central realizada por Dave Cutler y compañía cuando diseñaron Windows NT. Un proceso debe estar respaldado por un archivo en el sistema de archivos. Windows usa un archivo mapeado de memoria para mapear el código del proceso a la memoria virtual. Esto no es diferente para un programa .NET, a pesar de que gran parte de su código obtiene JIT compilado en la memoria. El conjunto que contiene el IL se correlaciona de la misma manera.

Bueno para algo más que el funcionamiento eficiente del sistema operativo, los usuarios y los escáneres de virus realmente no les gusta el código ejecutable que sale de la nada.

Cuestiones relacionadas