2013-02-18 76 views
0

我正在編寫一個應用程序,需要在用戶每次安裝後啓動計算機時才能工作。我試圖在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 2013-02-18 09:50:48

+0

我不知道我serched整個註冊表,我couldent找到它... – user1839169 2013-02-18 09:58:15

+0

你在運行什麼操作系統? 64位或32位?如果Vista/7/8是否在使用或不使用UAC(用戶帳戶控制)的情況下運行應用程序? – Arran 2013-02-18 10:03:58

回答

0

你試圖打開子根鍵水木清華這樣的:

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

,然後讓你的子項:

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

+0

這個kinnda的作品 – user1839169 2013-02-18 11:37:11

+0

它獲取它在註冊表中的所有用戶目錄,但那好,謝謝:) – user1839169 2013-02-18 11:38:01

+0

,但它仍然寫入當前用戶insted的所有用戶部分 – user1839169 2013-02-18 12:06:58

相關問題