2010-07-24 34 views
9

Vì vậy, trong sổ đăng ký của tôi, tôi có mục nhập trong "LocalMachine \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \" được gọi là "COMODO Internet Security". . Bây giờ những gì tôi muốn biết là làm thế nào tôi có thể nhận được đăng ký để kiểm tra nếu mục đó tồn tại? Nếu nó làm điều này nếu không thì làm điều đó. Tôi biết làm thế nào để kiểm tra nếu subkey "Run" tồn tại nhưng không phải là mục nhập cho "COMODO Internet Security", đây là mã tôi đã sử dụng để có được nếu subkey tồn tại.Nhận nếu mục đăng ký tồn tại nếu thực hiện việc này, nếu không thực hiện điều đó

   using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")) 
       if (Key != null) 
       { 

        MessageBox.Show("found"); 
       } 
       else 
       { 
        MessageBox.Show("not found"); 
       } 

Trả lời

9

Nếu bạn đang tìm kiếm một giá trị theo khóa con, (nghĩa là "mục nhập") bạn có thể sử dụng RegistryKey.GetValue(string). Điều này sẽ trả về giá trị nếu nó tồn tại và null nếu không.

Ví dụ:

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")) 
    if (Key != null) 
    {  
     string val = Key.GetValue("COMODO Internet Security"); 
     if (val == null) 
     { 
      MessageBox.Show("value not found"); 
     } 
     else 
     { 
      // use the value 
     } 
    } 
    else 
    { 
     MessageBox.Show("key not found"); 
    } 
+0

ok và làm cách nào để tôi tìm trong localmachine bằng getvalue? – NightsEVil

+0

Thêm ví dụ. – jwismar

+0

Lỗi Không thể chuyển đổi hoàn toàn loại 'đối tượng' thành 'chuỗi'. Một chuyển đổi rõ ràng tồn tại (bạn có bỏ lỡ một dàn diễn viên không?) – NightsEVil

0

Các liên kết sau đây sẽ làm rõ điều này: Mã

How to check if a registry key/subkey already exists

mẫu:

using Microsoft.Win32; 

RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software\\Geekpedia\\Test"); 

if(rk != null) 
{ 
    // It's there 
} 
else 
{ 
    // It's not there 
} 
+0

nhưng tôi cần phải tìm một mục khởi động cụ thể dưới máy cục bộ người dùng hiện tại của windows windows Chạy – NightsEVil

+0

@Leniel: FYI: Nếu, ví dụ, 'Geekpedia' không có trong Registry theo HLKM \ Software, VS2010 sẽ ném Ngoại lệ tham chiếu Null khi cố gắng mở khóa ''Software \\ Geekpedia \\ Test" '. – jp2code

1

Hãy thử điều này:

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\COMODO Internet Security")) 
{ 
    if (Key != null) 
    MessageBox.Show("found"); 
    else 
    MessageBox.Show("not found"); 
} 
+0

nhưng tôi cần tìm một mục khởi động cụ thể dưới máy cục bộ người dùng hiện tại microsoft windows Run – NightsEVil

0

Tôi gặp vấn đề gần đây khi tôi đang cố gắng lấy các khóa con trong mục đăng ký, nhưng vấn đề là vì tôi đã lặp qua mọi khóa đăng ký trong phần đó của sổ đăng ký, đôi khi các giá trị sẽ không có khóa con tôi đang tìm kiếm, và tôi sẽ nhận được một ngoại lệ tham chiếu null khi cố gắng đánh giá giá trị của khóa con.

Vì vậy, rất giống với những gì một số câu trả lời khác được cung cấp, đây là những gì tôi đã kết thúc đi với:

string subkeyValue = null; 

var subKeyCheck = subkey.GetValue("SubKeyName"); 

if(subKeyCheck != null) 
{ 
    subkeyValue = subkey.GetValue("SubKeyName").ToString(); 
} 

Vì vậy, tùy thuộc vào những gì giá trị mà bạn đang tìm kiếm khóa, chỉ cần trao đổi nó ra cho "SubKeyName "và điều này nên làm các trick.

0

Mã của tôi

 private void button2_Click(object sender, EventArgs e) 

    { 
     string HKCUval = textBox1.Text; 
     RegistryKey HKCU = Registry.CurrentUser; 
     //Checks if HKCUval exist. 
     try { 
      HKCU.DeleteSubKey(HKCUval); //if exist. 
     } 
     catch (Exception) 
     { 
      MessageBox.Show(HKCUval + " Does not exist"); //if does not exist. 
     } 

     } 

Hy vọng nó giúp.

Các vấn đề liên quan