J'ai une petite application avec une option CheckBox
que l'utilisateur peut définir s'il souhaite que l'application démarre avec Windows.
Ma question est de savoir comment configurer l'application pour qu'elle s'exécute au démarrage.
ps: J'utilise C # avec .NET 2.0.
Plusieurs options, par ordre de préférence:
HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run
. Le seul problème ici est qu'il nécessite un accès en écriture au registre, qui n'est pas toujours disponible.HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run
. Le seul problème ici est qu'il nécessite un accès en écriture au registre, qui n'est pas toujours disponible.Cette réponse est plus ancienne maintenant. Depuis que j'ai écrit ceci, Windows 10 est sorti, ce qui modifie le fonctionnement des dossiers du menu Démarrer ... y compris le dossier Startup
. Je ne sais pas encore à quel point il est facile d'ajouter ou de supprimer un fichier dans ce dossier sans faire également référence à la base de données interne que Windows utilise pour ces emplacements.
Merci à tous d'avoir répondu aussi rapidement ... Joel, j'ai utilisé votre option 2 et ajouté une clé de registre dans le dossier "Exécuter" de l'utilisateur actuel ........ Voici le code que j'ai utilisé pour tous les autres intéressés.
using Microsoft.Win32;
private void SetStartup()
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (chkStartUp.Checked)
rk.SetValue(AppName, Application.ExecutablePath);
else
rk.DeleteValue(AppName,false);
}
Vous devez définir une clé de registre, généralement avec votre programme d'installation. Voir http://www.windowsdevcenter.com/pub/a/oreilly/windows/ron/startup_0401.html pour une visite complète.
Vous pouvez créer une entrée de registre dans "HKCU\Software\Microsoft\Windows\CurrentVersion\Run", sachez toutefois que cela peut fonctionner différemment sous Vista. Votre paramètre peut être "virtualisé" à cause du contrôle de compte d'utilisateur.
Si une application est conçue pour démarrer au démarrage de Windows (par opposition à la connexion d’un utilisateur), votre seule option est d’impliquer un service Windows. Ecrivez l’application en tant que service ou écrivez un service simple qui existe uniquement pour lancer l’application.
La rédaction de services peut être délicate et peut imposer des restrictions inacceptables dans votre cas particulier. Un modèle de conception courant est une paire front-end/back-end, avec un service qui fait le travail et un frontal d'application qui communique avec le service pour afficher des informations à l'utilisateur.
D'autre part, si vous souhaitez simplement que votre application démarre à la connexion de l'utilisateur, vous pouvez utiliser les méthodes 1 ou 2 répertoriées par Joel Coehoorn.
Voici tous les moyens d’ajouter votre programme au démarrage pour Windows Vista, 7, 8, 10
- Chemin du fichier
C:\Users\Bureau Briffault\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
(Visible à partir du gestionnaire de tâches, en cours d'exécution avec succès connexion réussie, aucun privilège d'administrateur requis)
C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
(visible à partir du gestionnaire de tâches, s'exécutant sur tous les utilisateurs succès de la connexion, privilèges d'administrateur requis)
- Chemin du registre
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
(Visible à partir du gestionnaire de tâches, en cours d'exécution en cas de connexion réussie de l'utilisateur actuel, privilèges No Admin requis)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
(Non visible à partir du gestionnaire de tâches, en cours d'exécution en cas de connexion réussie de l'utilisateur actuel, Exécution d'une session unique, aucun privilège d'administrateur requis)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
(Visible à partir du gestionnaire de tâches, en cours d'exécution en cas de réussite de la connexion de l'utilisateur, privilèges Admin Requis)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
(Non visible à partir du gestionnaire de tâches, en cours d'exécution lorsque tous les utilisateurs se sont connectés, Exécution d'une session unique, privilèges d'administrateur requis)
- Planificateur de tâches
Microsoft.Win32.Taskscheduler.dll
(Non visible à partir du gestionnaire de tâches, Exécution au démarrage de Windows, Exécution en tant qu'administrateur, privilèges d'administrateur requis)
/// <summary>
/// Add application to Startup of windows
/// </summary>
/// <param name="appName"></param>
/// <param name="path"></param>
public static void AddStartup(string appName, string path)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
key.SetValue(appName, "\"" + path + "\"");
}
}
/// <summary>
/// Remove application from Startup of windows
/// </summary>
/// <param name="appName"></param>
public static void RemoveStartup(string appName)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
key.DeleteValue(appName, false);
}
}
J'ai trouvé l'ajout d'un raccourci au dossier de démarrage était le moyen le plus simple pour moi. J'ai dû ajouter une référence à "Modèle d'objet hôte de script Windows" et "Microsoft.CSharp", puis utilisé ce code:
IWshRuntimeLibrary.WshShell Shell = new IWshRuntimeLibrary.WshShell();
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\MyAppName.lnk";
System.Reflection.Assembly curAssembly = System.Reflection.Assembly.GetExecutingAssembly();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)Shell.CreateShortcut(shortcutAddress);
shortcut.Description = "My App Name";
shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
shortcut.TargetPath = curAssembly.Location;
shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + @"MyIconName.ico";
shortcut.Save();
C'est une solution si simple:
Ajouter
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.SetValue("Your Application Name", Application.ExecutablePath);
Retirer
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.DeleteValue("Your Application Name", false);
Vous pouvez le faire avec la classe win32 dans l'espace de noms Microsoft.
using Microsoft.Win32;
using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\"");
}
En plus de la réponse de Xepher Dotcom, le chemin du dossier de démarrage de Windows devrait être codé comme suit:
var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);