2009-02-08 20 views
32

Muy bien, así que estoy trabajando en la programación de mi propio instalador en C#, y lo que me gustaría hacer es algo así como poner los archivos en el .exe, para que pueda do File.Copy (archivo, filedir);Cómo almacenar archivos en un EXE

O, si esto no es posible, ¿hay otra forma de hacer lo que estoy intentando hacer?

+0

por curiosidad, ¿por qué está programando su propio instalador? –

+2

Para ver si podría, en realidad. – S3THST4

+29

La gente siempre te dice "Código de código si quieres aprender un idioma" hasta que realmente codifique algo, entonces todos son NO REINVENTAR A TENER CUIDADO – Rayne

Respuesta

28

No codificaría mi propio instalador, pero si realmente quiere incrustar archivos en su ensamblado, podría usar recursos muy tipados. En el cuadro de diálogo de propiedades de su proyecto abra la pestaña "Recursos" y luego agregue su archivo. A continuación, ser capaz de obtener el archivo con:

ProjectNamespace.Properties.Resources.MyFile 

entonces usted será capaz de escribir el recurso incrustado en el disco usando:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile); 
+0

Gracias por su respuesta, esto es lo que estoy buscando. Muy bien, entonces estoy usando File.Copy(); y necesito una sobrecarga de cadena para Filepath. Cualquier sugerencia PS- Trató .ToString(); – S3THST4

+0

¿Qué problema hay en el proyecto C# al que te he vinculado anteriormente, completo con el código fuente? ¿No es eso lo que estás buscando? –

+0

Actualizado para mostrar cómo puede escribir el archivo en el disco utilizando System.IO.File.WriteAllBytes –

4

Supongo que aquí, pero si intenta almacenar recursos en su aplicación antes de la compilación, puede en el Explorador de proyectos, hacer clic con el botón derecho en el archivo que desea agregar, seleccionar propiedades y cambiar el tipo a Recurso incrustado .

A continuación, puede acceder a los recursos incrustados posteriormente a través de las instrucciones de este KB: http://support.microsoft.com/kb/319292

8

Honestamente, yo sugeriría que no crear su propio instalador. Hay muchos problemas para crear instaladores. Incluso los grandes instaladores ya no crean sus propios instaladores, sino que crean paquetes personalizados de MSI.

Utilice el instalador de Mirosoft (MSI). Es la cosa justa que hacer. Haga su propio front-end personalizado, pero no recree la ya compleja rueda que existe.

ACTUALIZACIÓN: Si solo hace esto para aprender, entonces rehuiría pensar en él como "un instalador". Es posible que tenga la tentación de realizar su "investigación" y utilizarla algún día, y francamente, así es como terminamos con tantos problemas cuando salen nuevas versiones de Windows. La gente crea sus propias ruedas con suposiciones que no son válidas.

Lo que realmente está tratando de hacer se llama "empaquetado", y realmente tiene que familiarizarse íntimamente con el formato PE ejecutable, porque está hablando de cambiar la estructura de la imagen PE en el disco.

Puede simularlo, hasta cierto punto, con poner archivos en recursos, pero eso no es lo que realmente hacen los instaladores o los autoextractores.

Aquí hay un enlace al tutorial Self-Extractor, pero no está en C#.

No sé lo suficiente sobre los requisitos de .NET PE para saber si puede hacer esto con un ejecutable de código administrado o no.

ACTUALIZACIÓN2: Esto es probablemente más de lo que está buscando, inserta archivos en el recurso, pero como dije, no es realmente la forma en que lo hacen los instaladores profesionales o autoextractores. Creo que hay varias limitaciones sobre lo que puedes incorporar como recursos. Pero aquí hay algo similar a un Self-Extractor Demo escrito en C#.

+1

Definitivamente investigaría todos los instaladores disponibles ANTES de escribir el mío. Esto es más o menos de lo que estaba hablando en "No reinvente la rueda, a menos que planee aprender más sobre ruedas" http://www.codinghorror.com/blog/archives/001145.html –

+0

La única razón por la que estaba , era para ver si podía. No intento hacer adv ni nada, solo intento crear 1 formulario que al hacer clic en Instalar simplemente pone los archivos en un directorio. – S3THST4

+1

S3thst4, Definitivamente investigue sobre instaladores disponibles, pero no deje que los nay-sayers lo desanimen, la mayoría de los instaladores disponibles dejan mucho que desear, especialmente MSI, definitivamente hay espacio para la mejora masiva, los instaladores no pueden caminar en el sin embargo, prepárate para el injerto duro. –

0

en caso de que simplemente quieren almacenar varios archivos en un único archivo de almacenamiento (y extraer archivos de allí, interactuar, etc.) es posible que también desee consultar NFileStorage, .net file storage. escrito en 100% .NET C# con todas las fuentes incluidas. También viene con un intérprete de línea de comandos que permite la interacción desde la línea de comandos.

Cuestiones relacionadas