Come eseguire un’applicazione C # all’avvio di Windows?

Ho creato un’applicazione che si avvia durante l’avvio, con il prossimo codice qui sotto.
Il processo viene eseguito sullo strumento Gestione processi dopo il riavvio, ma non riesco a visualizzare l’applicazione sullo schermo. Quando apro lo stesso file .exe dal valore del registro di avvio, il programma funziona perfettamente.

// The path to the key where Windows looks for startup applications RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); // Add the value in the registry so that the application runs at startup rkApp.SetValue("MyApp", Application.ExecutablePath.ToString()); 

Cosa posso fare per sistemarlo?

Il codice è qui (win form app):

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Win32; namespace RunAtStartup { public partial class frmStartup : Form { // The path to the key where Windows looks for startup applications RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); public frmStartup() { InitializeComponent(); // Check to see the current state (running at startup or not) if (rkApp.GetValue("MyApp") == null) { // The value doesn't exist, the application is not set to run at startup chkRun.Checked = false; } else { // The value exists, the application is set to run at startup chkRun.Checked = true; } } private void btnOk_Click(object sender, EventArgs e) { if (chkRun.Checked) { // Add the value in the registry so that the application runs at startup rkApp.SetValue("MyApp", Application.ExecutablePath); } else { // Remove the value from the registry so that the application doesn't start rkApp.DeleteValue("MyApp", false); } } } } 

Prova questo codice

 private void RegisterInStartup(bool isChecked) { RegistryKey registryKey = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); if (isChecked) { registryKey.SetValue("ApplicationName", Application.ExecutablePath); } else { registryKey.DeleteValue("ApplicationName"); } } 

Fonte: http://www.dotnetthoughts.net/2010/09/26/run-the-application-at-windows-startup/

Potresti provare a copiare un collegamento alla tua applicazione nella cartella di avvio invece di aggiungere cose al registro. È ansible ottenere il percorso con Environment.SpecialFolder.Startup . Questo è disponibile in tutti i framework .net dal 1.1.

In alternativa, forse questo sito ti sarà utile, elenca molti dei modi in cui puoi far avviare automaticamente un’applicazione.

 public class StartUpManager { public static void AddApplicationToCurrentUserStartup() { using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.SetValue("My ApplicationStartUpDemo", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\""); } } public static void AddApplicationToAllUserStartup() { using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.SetValue("My ApplicationStartUpDemo", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\""); } } public static void RemoveApplicationFromCurrentUserStartup() { using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.DeleteValue("My ApplicationStartUpDemo", false); } } public static void RemoveApplicationFromAllUserStartup() { using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.DeleteValue("My ApplicationStartUpDemo", false); } } public static bool IsUserAdministrator() { //bool value to hold our return value bool isAdmin; try { //get the currently logged in user WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(user); isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (UnauthorizedAccessException ex) { isAdmin = false; } catch (Exception ex) { isAdmin = false; } return isAdmin; } } 

puoi controllare l’intero articolo qui

prima ho provato il codice qui sotto e non funzionava

 RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); rkApp.SetValue("MyAPP", Application.ExecutablePath.ToString()); 

Quindi, ho cambiato CurrentUser con LocalMachine e funziona

 RegistryKey rkApp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); rkApp.SetValue("MyAPP", Application.ExecutablePath.ToString()); 

Non ho trovato nessuno dei codici sopra funzionati. Forse perché la mia app sta eseguendo .NET 3.5. Non lo so. Il codice seguente ha funzionato perfettamente per me. Ho ottenuto questo da uno sviluppatore di applicazioni .NET di alto livello sul mio team.

 Scrivi (Microsoft.Win32.Registry.LocalMachine, @ "SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \", "WordWatcher", "\" "+ Application.ExecutablePath.ToString () +" \ "");
 public bool Write(RegistryKey baseKey, string keyPath, string KeyName, object Value) { try { // Setting RegistryKey rk = baseKey; // I have to use CreateSubKey // (create or open it if already exits), // 'cause OpenSubKey open a subKey as read-only RegistryKey sk1 = rk.CreateSubKey(keyPath); // Save the value sk1.SetValue(KeyName.ToUpper(), Value); return true; } catch (Exception e) { // an error! MessageBox.Show(e.Message, "Writing registry " + KeyName.ToUpper()); return false; } } 

Un’applicazione open source denominata “Startup Creator” configura l’avvio di Windows creando uno script e fornendo un’interfaccia facile da usare. Utilizzando VBScript potente, consente alle applicazioni o ai servizi di avviarsi a intervalli di ritardo programmati, sempre nello stesso ordine. Questi script vengono inseriti automaticamente nella cartella di avvio e possono essere riaperti per consentire modifiche in futuro.

http://startupcreator.codeplex.com/

per WPF: (dove lblInfo è un’etichetta, chkRun è un checkbox)

Questo è il massimo per mantenere la mia app in cima alle altre windows, inoltre dovrai aggiungere un’istruzione usingusing Microsoft.Win32; “, StartupWithWindows è il nome della mia applicazione

 public partial class MainWindow : Window { // The path to the key where Windows looks for startup applications RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); public MainWindow() { InitializeComponent(); if (this.IsFocused) { this.Topmost = true; } else { this.Topmost = false; } // Check to see the current state (running at startup or not) if (rkApp.GetValue("StartupWithWindows") == null) { // The value doesn't exist, the application is not set to run at startup, Check box chkRun.IsChecked = false; lblInfo.Content = "The application doesn't run at startup"; } else { // The value exists, the application is set to run at startup chkRun.IsChecked = true; lblInfo.Content = "The application runs at startup"; } //Run at startup //rkApp.SetValue("StartupWithWindows",System.Reflection.Assembly.GetExecutingAssembly().Location); // Remove the value from the registry so that the application doesn't start //rkApp.DeleteValue("StartupWithWindows", false); } private void btnConfirm_Click(object sender, RoutedEventArgs e) { if ((bool)chkRun.IsChecked) { // Add the value in the registry so that the application runs at startup rkApp.SetValue("StartupWithWindows", System.Reflection.Assembly.GetExecutingAssembly().Location); lblInfo.Content = "The application will run at startup"; } else { // Remove the value from the registry so that the application doesn't start rkApp.DeleteValue("StartupWithWindows", false); lblInfo.Content = "The application will not run at startup"; } } } 

Se non è ansible impostare l’avvio automatico dell’applicazione, provare a incollare questo codice per manifest

  

o cancellare manifest l’avevo trovato nella mia applicazione

OK, ecco i miei 2 centesimi: prova a passare il percorso con ogni barra rovesciata come doppio backslash. Ho trovato a volte chiamare WIN API richiede quello.

Penso che ci sia una specifica chiamata API Win32 che prende il percorso dell’applicazione e lo inserisce automaticamente nel registro per te nella posizione corretta, l’ho usato in passato ma non ricordo più il nome della funzione.