2010-12-15 60 views
0

嗨,大家好,我有一個奇怪的問題。如何在Windows 7 64位上使用C#從註冊表中獲取所有啓動進程的列表?

我想從註冊表中獲取所有啓動程序的列表 - LocalMachine,CurrentUser,子項Run,RunOnce,RunOnceEx。之後,我能得到的啓動文件夾中的鏈接列表

對於Win64中我發現,啓動程序,在這個關鍵

LOCALMACHINE /軟件/ Wow6432Node /微軟/視窗/ CURRENTVERSION /運行

問題是在這段代碼中,運行它我得到不同的子應用程序列表LocalMachine \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run而不是描述波紋管LocalMachine \ Software \ Microsoft \ Windows \ CurrentV ersion \ Run

這是正常的嗎?

Microsoft.Win32.RegistryKey key; 
key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false); 

foreach (string appName in key.GetValueNames()) 
{ 
     try 
     { 
     MessageBox.Show(appName); 
     } 
     catch (Exception ex) 
     { 

     } 

} 

我tryed使用此WMI solution但它沒有得到所有啓動的應用程序。這就是爲什麼我決定從註冊表中手動獲取它們的原因。

  1. 這個腳本是否正確,以及它爲什麼不做它應該做的事情?
  2. 是否有任何其他方式獲取所有啓動應用程序和進程?

    由於

回答

0

在64位Windows操作系統中,有2和不同的HKLM \軟件蕁麻疹。一個用於64位應用程序(即HKLM \ Software),另一個用於32位應用程序(從64位應用程序查看時爲HKLM \ Software \ Wow6432Node。對於32位應用程序,它被視爲HKLM \ Software )。

如果將.Net應用程序編譯爲MSIL或x64,則可以通過將Wow6432node添加到註冊表路徑來訪問32位軟件配置單元。

否則,您也可以編譯爲x86並以32位運行。

希望這個幫助

+0

偷偷摸摸,但可以理解。 – Amy 2010-12-16 00:36:15

+0

謝謝薩姆,問題是我在64位Windows上使用32位應用程序。而我正在使用VS 2010 Express。所以編譯64位應用程序有點棘手。但現在一切都很好。無需probs即可獲取所有註冊表項。再次感謝! – nasko7 2010-12-16 05:30:52

相關問題