Incrustar archivos en un ejecutable

Filed under .NET Development

La idea de este artículo es mostrar cómo incrustar archivos en un ejecutable y para esto haremos de cuenta que queremos incrustar imágenes.

Generalmente tenemos que mostrar imágenes en nuestra aplicación. Imágenes que no cambiarán en tiempo de ejecución pero que sí podrán cambiar en versiones futuras de la aplicación.
Muchos de ustedes estarán imaginando posibles soluciones a este problema. Por ejemplo:

- Poner las imágenes en una carpeta dentro de la carpeta de la aplicación.
- Poner las imágenes en una tabla en una base de datos.
- Incrustar las imágenes en el ejecutable.

Como siempre en esto del desarrollo de software, no hay una solución que sea la mejor y la única para todas las situaciones posibles de negocio. Veámos algunas de las ventajas y desventajas de las soluciones propuestas anteriormente:

- Poner las imágenes en una carpeta dentro de la carpeta de la aplicación:
- Ventaja: si queremos cambiar las imágenes, digamos que para dar una nueva apariencia a la aplicación sin tener que recompilarla, simplemente vamos a la carpeta en donde están las imágenes y las remplazamos.
- Ventaja: ya que las imágenes no estarán incrustadas en el ejecutable, el tamaño del ejecutable será menor.
- Desventaja: cualquier usuario puede borrar las imágenes de la carpeta. Para hacer la aplicación más robusta, habría que validar si las imágenes no fueron borradas.
- Desventaja: cualquier usuario podría ir a la carpeta en donde tenemos las imágenes almacenadas y podría remplazarlas por otras, dejando nuestra aplicación con una apariencia inconsistente.

- Poner las imágenes en una tabla en una base de datos:
- Ventaja: las imágenes quedarían almacenadas en un solo lugar.
- Desventaja: habría que tener una base de datos con una tabla que sirva exclusivamente para almacenar las imágenes. Esto puede ser bastante molesto y hasta podría llegar a enlentecer el proceso de desarrollo de la aplicación, así como también podría agregar complejidad, etc.

- Incrustar las imágenes en el ejecutable:
- Ventaja: las imágenes quedarían almacenadas en un solo lugar.
- Ventaja: un "usuario común" no podrá cambiar fácilmente las imágenes.
- Desventaja: el tamaño del ejecutable será mayor dependiendo de la cantidad de imágenes que tengamos.
- Desventaja: si queremos cambiar las imágenes tendríamos que recompilar el ejecutable.

En el caso de querer incrustar imágenes, podemos utilizar el control "ImageList".

1 – En el explorador de solución buscamos nuestro proyecto. Para agregar un archivo de recursos, hacemos clic derecho sobre él y elegimos la opción "Add" -> "New Item…". Cuando aparezca el cuadro "Add New Item", buscamos la plantilla "Resources File" y la seleccionamos. De nombre le ponemos "Imagenes.resx" y hacemos clic en "Add". Se abrirá "Imagenes.resx".

[Haga clic en la imagen para ampliar]


2 – En "Imagenes.resx", elegimos la opción "Images". Por último, desplegamos "Add Resource" y elegimos "Add Existing File..". Buscamos una imagen y la abrimos.

[Haga clic en la imagen para ampliar]

[Haga clic en la imagen para ampliar]

[Haga clic en la imagen para ampliar]


3 – Guardamos los cambios.

Para mostrar la imagen en un botón por ejemplo, podemos utilizar el siguiente código:

    using System.Drawing;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        public Form1()
        {
            this.InitializeComponent();
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            Button boton = new Button();
            boton.AutoSize = true;
            boton.Image = Imagenes.button_ok;
            boton.ImageAlign = ContentAlignment.MiddleLeft;
            boton.Text = "¡Hola mundo!";
            boton.TextImageRelation = TextImageRelation.ImageBeforeText;
            this.Controls.Add(boton);
        }
    }

[Haga clic en la imagen para ampliar]


Para reproducir un sonido cuando el usuario haga clic en el botón, podemos agregar un nuevo archivo de recursos llamado "Sonidos.resx" y en lugar de elegir la categoría "Images" elegimos "Audio".

[Haga clic en la imagen para ampliar]

[Haga clic en la imagen para ampliar]

    using System.Drawing;
    using System.Media;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        public Form1()
        {
            this.InitializeComponent();
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            Button boton = new Button();
            boton.AutoSize = true;
            boton.Image = Imagenes.button_ok;
            boton.ImageAlign = ContentAlignment.MiddleLeft;
            boton.Text = "¡Hola mundo!";
            boton.TextImageRelation = TextImageRelation.ImageBeforeText;
            boton.Click += new System.EventHandler(this.Boton_Click);
            this.Controls.Add(boton);
        }

        private void Boton_Click(object sender, System.EventArgs e)
        {
            using (SoundPlayer windowsShutdown = new SoundPlayer(Sonidos.Windows_Shutdown))
            {
                windowsShutdown.Play();
            }
        }
    }

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*