views:

34

answers:

1

well with some help from this site and dream in code i fixed my error, but am now the code just plain doesn't seem to be working. Here is the code:

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

and when i use it, it give the "value not found" message box like its supposed to if it doesn't exist, only problem is the value DOES exist... i checked manually through regedit. so whats wrong?

+1  A: 

Probably you have the problem to query registry values of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run key on 64-bit operation system from a 32-bit application. In the case you will see values existion only under HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run (see http://msdn.microsoft.com/en-us/library/aa384232.aspx). If you use unmanaged API (or invoce) you can open Run key with RegOpenKeyEx and KEY_QUERY_VALUE | KEY_WOW64_64KEY flags (see http://msdn.microsoft.com/en-us/library/aa384129.aspx). You should test whether the application run under 64-bit operation system before using KEY_QUERY_VALUE | KEY_WOW64_64KEY flag. In case of 32-bit operation system you should use KEY_QUERY_VALUE flag only.

Oleg