Está en la página 1de 3

Iniciar Aplicacion con Windows en C#

Existen varias formas de lograr que nuestros programas en C# puedan correr al iniciar sesión en
Windows. En este artículo trataremos la que se basa en el registro de Windows para lograr esto. Antes
que nada, para ir verificando nosotros mismos el registro, podemos utilizar msconfig.exe de Windows,
que nos muestra los programas que se encuentran en el registro de inicio.

Como trabajaremos con el registro, necesitamos una clase que nos permita trabajar con el. Utilizaremos
la clase Registry, la cual nos provee el namespace Microsoft.Win32. Incluimos la siguiente linea en la
cabecera:

using Microsoft.Win32;

Esta clase posee dos métodos que son los que nos interesan: CurrentUser() y LocalMachine().

Con el primero trabajaremos el registro que abarca al usuario con el que estemos logueados en
Windows, el segundo, al sistema operativo entero. Por lo tanto, si queremos que nuestro programa se
autoejecute solo en nuestra cuenta, utilizamos CurrentUser(), si queremos que haga efecto para todos
los usuarios usamos LocalMachine(). (En este artículo para ejemplificar trabajaremos con CurrentUser()).

La otra clase que nos interesa es RegistryKey, que nos permitira acceder a las claves de registro donde
se encuentran los “autoruns“, la utilizamos así:

RegistryKey runK =
Registry.CurrentUser.OpenSubKey( "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ,  true );

Lo dejamos como propiedad de nuestra clase y lo inicializamos en el constructor. Para insertar el registro
que dirá que nuestro programa iniciará en el arranque de sesión utilizamos el siguiente código:

runK.SetValue(path, nombreApp);

El primer argumento es el nombre que llevará el registro y el segundo es el contenido del registro, es
decir, la ruta de nuestro programa. Para no escribir la ruta entera, y como no siempre será la misma,
utilizamos el método ExecutablePath() de la clase Application que nos entrega la ruta completa de
nuestro programa.

Para eliminar el registro…


 runK.DeleteValue(path, false);

ahora veamos el codigo de nuestra aplicacion que sera de la siguiente manera:


//Variables
        string lbl = "";
        string path = "";
        string nombreApp = ""; //NombreApp será el identificador en el registro

        private void Form1_Load(object sender, EventArgs e)
    {
            lbl = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            path =
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Remove(0,
6) + "\\" + lbl;
            nombreApp = "IniciarAplicacionWindows";
    }

        private void btnIniciar_Click(object sender, EventArgs e)


    {      
            if (checkBox1.Checked == true)
      {
                try
        {
                    // Resgistrará en Inicio del registro la aplicación indicada
                    // Devuelve True si todo fue bien, False en caso contrario
                    // Guardar la clave en el registro
                    // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

                    RegistryKey runK
= Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true);
                    // añadirlo al registro
                    // Si el path contiene espacios se debería incluir entre comillas dobles
                    if (nombreApp.StartsWith("\"") == false && nombreApp.IndexOf(" ") > -1)
          {
                        nombreApp = "\"" + nombreApp + "\"";
          }
                    runK.SetValue(path, nombreApp);
                    //return true;
        }
                catch (Exception ex)
        {
                    Console.WriteLine("ERROR al guardar en el registro.{0}Seguramente no tienes privilegios suficientes.
{0}{1}{0}---xxx---{2}", '\n', ex.Message, ex.StackTrace);
                    //return false;
        }
      }
            else
      {
                // Quitará de Inicio la aplicación indicada
                // Devuelve True si todo fue bien, False en caso contrario
                // Si la aplicación no estaba en Inicio, devuelve True salvo que se produzca un error
                try
        {
                    RegistryKey runK
= Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true);
                    // quitar la clave indicada del registo
                    runK.DeleteValue(path, false);
                    //return true;
        }
                catch (Exception ex)
        {
                    Console.WriteLine("ERROR al eliminar la clave del registro.{0}Seguramente no tienes privilegios
suficientes.{0}{1}{0}---xxx---{2}", '\n', ex.Message, ex.StackTrace);
                    //return false;
        }
      }
    }

También podría gustarte