2009-02-17 45 views
13

Estoy creando un programa en C++, que quiero poder tener la opción de permitir que los usuarios se inicien automáticamente en Windows. Entonces, cuando un usuario inicia su computadora, Windows iniciará automáticamente este programa. He leído cosas sobre cómo modificar el registro o ponerlo en la carpeta de inicio, pero ¿cuál sería la mejor forma "limpia" de hacerlo?Cómo crear un programa de arranque automático C++

+0

Consulte este enlace http://ask-leo.com/auto_start_how_do_i_run_a_program_automatically_when_windows_starts.html – Vinay

Respuesta

15

La carpeta de inicio está lo suficientemente limpia.

Ofrece al usuario la posibilidad de eliminarlo si es necesario.

+0

Tenga en cuenta que si haga algo como esto, en lugar de ejecutar un servicio, que su aplicación pueda ser ejecutada por más de un usuario a la vez. – Eclipse

+1

Sí, realmente odio que algo comience automáticamente y tengo que buscar en el registro para evitar que vuelva a funcionar. Algunos desarrolladores actúan como si fueran dueños de su máquina. –

3

Dependiendo de si está ejecutando una instalación para todos los usuarios o por usuario, colóquela en la carpeta de Inicio de Todos los usuarios o en la carpeta de inicio por usuario. La carpeta de inicio que ve en el menú es la fusión de ambos, pero los usuarios que no son administradores no pueden eliminar las entradas provenientes de la parte Todos los usuarios.

En realidad, no tiene que hacer nada por esto. Los usuarios pueden copiar su acceso directo normal al menú de Inicio ellos mismos. Por lo tanto, cualquier programa puede ser un programa de inicio automático. No necesita ser C++ en absoluto.

9

Hay muchas maneras de iniciar automáticamente una aplicación, pero la más fácil, más común y la OMI mejores son:

  1. poner un acceso directo en la carpeta de inicio automático
  2. Añadir una entrada de inicio automático para el registro (Software \ Microsoft \ Windows \ CurrentVersion \ Run)

El resultado final es el mismo para ambos. Creo que la forma de registro se ejecuta antes en el proceso de inicio de sesión que en el inicio, pero no estoy seguro. No hace ninguna diferencia para la mayoría de los casos de todos modos. Prefiero el registro, pero ese es el gusto personal. Puede crear y eliminar la clave de registro o el acceso directo programáticamente en su aplicación.

Con ambas opciones puede usar una configuración para todos los usuarios (carpeta de inicio de todos los usuarios o clave HKLM en el registro) o específica del usuario (carpeta de inicio de usuario o clave HKCR).

En general, es mejor utilizar las opciones por usuario, porque puede tener ciertos privilegios de escritura en esas áreas; y cada usuario en la computadora puede tener su propia configuración.

0

Puede registrarlo como un servicio de Windows. Puede usar "Qt Solutions" para realizar fácilmente una aplicación como servicio de Windows.

+0

Un servicio de Windows no es en modo alguno lo mismo que el OP. Intente publicar respuestas que de hecho se apliquen al tema en cuestión. –

+0

Puede crear un archivo por lotes para implementar la aplicación como un servicio o anular su implementación. – Qubeuc

-1

Con este código se puede hacer

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Reg:TRegistry; 
begin 
    Reg := TRegistry.Create; 
    try 
     Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True); 
     Reg.WriteString('Program name',ParamStr(0)); 
    finally 
    Reg.Free; 
    end; 

end; 

o esto:

using Microsoft.Win32; 
private void AddStartUpKey(string _name, string _path) { 
    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros oft\Windows\CurrentVersion\Run", true); 
    key.SetValue(_name, _path); 
} 
private void RemoveStartUpKey(string _name) { 
    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros oft\Windows\CurrentVersion\Run", true); 
    key.DeleteValue(_name, false); 
} 
+4

En lugar de solo publicar un bloque de código, * explique * por qué este código resuelve el problema planteado. Sin una explicación, esta no es una respuesta. –

+0

Además, ninguno de estos son C++. – immibis

Cuestiones relacionadas