2013-02-18 4 views
0

Я пишу приложение, которое должно работать каждый раз, когда компьютер запускается после того, как пользователь его установит. я попытался сделать это в установках calss в событии afterInstall, но установщик помещает его в реестр и запускается, когда перезагружается Windows, поэтому я попытался сделать это с зарегистрированным событием и получил те же результаты. После этого я присвоил классу установщика заданного свойства значение false, но затем атакованный evet не выстрелил. Моя последняя попытка заключалась в том, чтобы запустить приложение после его установки, а затем позволить ему написать себя в реестре, и случилось странное дело, что это произошло в реестре, но нет места, в котором я хотел, чтобы кто-нибудь знал, почему это так и как можно Я чиню это?Как зарегистрировать мое приложение в реестре Windows?

Мой код:

bool registry = true; 

RegistryKey rkSubKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", false); 
string[] values = rkSubKey.GetValueNames(); 

foreach(string name in values) 
{ 

    if (name.Equals("appName")) 
    registry = false; 
} 

if (registry) 
{ 

    RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
    rkApp.SetValue("appName", Application.ExecutablePath.ToString()); 
    DialogResult r = MessageBox.Show("The system now needs to restart your computer whould you like to do it now?", "Restart is needed", MessageBoxButtons.YesNo); 
    if (r == DialogResult.Yes) 
    { 
    System.Diagnostics.Process.Start("ShutDown", "/r"); 
    } 
    return; 
} 
mainModule.start(); 
+0

«Нет места, где я хотел, чтобы это было» ... хорошо, что задает вопрос ... *, где он на самом деле написал его тогда? – Arran

+0

Я не знаю, что я зацепил весь реестр, и я смог найти его ... – user1839169

+0

Какая ОС вы работаете? 64-битный или 32-битный? Если Vista/7/8 вы используете приложение с или без UAC (User Account Control)? – Arran

ответ

0

Вы пытались открыть ключ subroot л так:

var HKLM = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); 

, а затем получить подключ:

var baseKey = HKLM.OpenSubKey(...<the path here>..) 

?

+0

это Киннд работает – user1839169

+0

он получает его на весь пользователь директорию в реестре, но что ки спасибо :) – user1839169

+0

, но он по-прежнему пишет в разделе всех пользователя InstEd текущего пользователя – user1839169