2013-02-10 18 views
1

Я пытался запустить приложение при запуске. Я добавил контекстное меню, которое должно включать и выключать эту функцию. В контекстном меню включена функция «проверка» (появляется флажок, если она отмечена) слева.Запуск приложения при запуске

// 
    // menu_startup 
    // 
    this.menu_startup.Name = "menu_startup"; 
    this.menu_startup.ShortcutKeyDisplayString = ""; 
    this.menu_startup.Size = new System.Drawing.Size(201, 22); 
    this.menu_startup.Text = "Run on startup"; 
    this.menu_startup.Click += new System.EventHandler(this.menu_startup_Click); 

И это то, что я сделал в Form1.cs

public string regKey = "IMGit"; 

     public Form1() 
     { 
      InitializeComponent(); 
      notifyIcon1.ContextMenuStrip = contextMenuStrip1; 

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

      if (rkApp.GetValue(this.regKey) == null) 
      { 
       this.menu_startup.Checked = false; 
      } 
      else 
      { 
       this.menu_startup.Checked = true; 
      } 

      this.menu_about.Click += menu_about_Click; // Ignore 
      this.menu_exit.Click += menu_exit_Click; // Ignore 
      this.menu_startup.Click += menu_startup_Click; 
     }  

      private void menu_startup_Click(object sender, EventArgs e) 
      { 
       RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

       if (rkApp.GetValue(this.regKey) == null) 
       { 
        rkApp.SetValue(this.regKey, Application.ExecutablePath.ToString()); 
       } 
       else 
       { 
        rkApp.DeleteValue(this.regKey, false); 
       } 
      } 

Я не могу видеть, что я делаю неправильно здесь. Это должно установить новую запись в реестре для моего приложения.

Если я добавлю строки кода, чтобы создать запись в реестре в конструкторе, она создаст запись просто отлично.

Идеи?

+0

Вы пробовали настройки проекта? Попробуйте указать там значение и проверьте, соответствует ли оно этому значению и загружает настройки. – coder

+0

Я понятия не имею, как это сделать. – Aborted

+0

Вот ссылка на это http://msdn.microsoft.com/en-us/library/vstudio/25zf0ze8(v=vs.100).aspx – coder

ответ

0

Создание функции лямбда в конструкторе решило проблему.

this.menu_startup.Click += (s, ea) => 
    { 
     RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     string appPath = Application.ExecutablePath.ToString(); 

     this.menu_startup.Checked = (rkApp.GetValue(this.regKey) == null); 

     if (rkApp.GetValue(this.regKey) == null) 
     { 
      rkApp.SetValue(this.regKey, appPath); 
     } 
     else 
     { 
      rkApp.DeleteValue(this.regKey, false); 
     } 
    }; 
1

Если вы хотите, чтобы раздел реестра был создан при запуске приложения, вам необходимо вызвать метод menu_startup_Click из конструктора.

public Form1() 
     { 
      InitializeComponent(); 
      notifyIcon1.ContextMenuStrip = contextMenuStrip1; 

      //Make the call to add the registry key here (plus Check or Uncheck the menu) 
      menu_startup_Click(null,null); 

      this.menu_startup.Click += menu_startup_Click;     
     }  


private void menu_startup_Click(object sender, EventArgs e) 
     { 
      RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

      //Check or Uncheck the menu 
      this.menu_startup.Checked = (rkApp.GetValue(this.regKey) == null) 

      if (rkApp.GetValue(this.regKey) == null) 
      { 
       rkApp.SetValue(this.regKey, Application.ExecutablePath.ToString()); 
      } 
      else 
      { 
       rkApp.DeleteValue(this.regKey, false); 
      }    
     } 
+0

Предлагаемое вами изменение просто создает ключ реестра, но не позволяет: 1) Добавить галочку в контекстное меню 2) Удалить запись в реестре, когда контекстное меню будет нажато снова. Это означает, что я есть где я был в начале (I может создать запись реестра от конструктора, упомянутого в вопросе). ** Редактировать: ** С линией 'this.menu_startup.Checked = false;' Я пытался удалить галочку, если запись реестра не существует. – Aborted

+1

Можете ли вы посмотреть мое редактирование и сообщить мне, подходит ли оно? –

+0

Спасибо. Я попробовал ваше редактирование, но он все равно не работает. Единственное изменение заключается в том, что флажок установлен, если запись в реестре существует, то есть мы на правильном пути - я думаю. – Aborted

Смежные вопросы