The error you are getting is due to UAC permission error. Run the
program using Administrator mode.

If you still get the same error try this :

using System.ComponentModel;

int ret = RegOpenKeyEx(hKey, keyPath, 0, KEY_ALL_ACCESS |
KEY_WOW64_32KEY, out hKey);
if (ret != 0)
{
  string OSerrorMessage = new Win32Exception(ret).Message;

}


BTW, the following link mentions that any 32 bit application's
registry access will be redirected to wow6432node by windows :
http://www.windowsitpro.com/article/internals-and-architecture/what-s-the-wow6432node-under-the-hkey_local_machine-software-registry-subkey-.aspx




On Jun 16, 8:22 pm, Chris McClintock <[email protected]> wrote:
> Hi, I am having problems with RegDeleteKeyEx function available in
> advapi.dll on Win7 64bit and c# - basically i am trying to delete a
> value from HKLM\Software\Wow6432Node\Test but cannot figure out why I
> am getting error_success=2 (file not found I believe) when it should
> be 0 and the reg value not being deleted...here comes the code....:
>
> I have the following in a codefile to try and delete the reg value;
>
> regload rl = new regload();
> bool del = rl.WoWDel("HKLM", @"Software\Test", "TESTValue");
>
> This being the main code:
>
> using System;
> using System.Runtime.InteropServices;
> using System.Text;
> using Microsoft.Win32;
>
> namespace AdvRegistry
> {
>     public class regload
>     {
>
>         [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
>         public static extern int RegOpenKeyEx(
>           UIntPtr hKey,
>           string subKey,
>           int ulOptions,
>           int samDesired,
>           out UIntPtr hkResult);
>
>         [DllImport("advapi32.dll", EntryPoint = "RegDeleteKeyEx",
> SetLastError = true)]
>         public static extern int RegDeleteKeyEx(
>             UIntPtr hKey,
>             string lpSubKey,
>             int samDesired,
>             int Reserved);
>
>         [DllImport("advapi32.dll", SetLastError = true)]
>         public static extern int RegCloseKey(
>             UIntPtr hKey);
>
>         public static int KEY_WOW64_64KEY = 0x0100;
>         public static int KEY_WOW64_32KEY = 0x0200;
>         public static int KEY_READ = 0x20019;
>         public static int KEY_WRITE = 0x20006;
>         public static int KEY_ALL_ACCESS = 0xF003F;
>         public static UIntPtr HKEY_LOCAL_MACHINE = new
> UIntPtr(0x80000002u);
>         public static UIntPtr HKEY_CURRENT_USER = new
> UIntPtr(0x80000001u);
>
>         public bool WoWDel(string RegRoot, string RegPath, string
> RegItem)
>         {
>             if (RegRoot == "HKCU") DelWowReg(HKEY_CURRENT_USER,
> RegPath, RegItem);
>             else if (RegRoot == "HKLM") DelWowReg(HKEY_LOCAL_MACHINE,
> RegPath, RegItem);
>             else return false;
>             return true;
>         }
>
>         private static int DelWowReg(UIntPtr hKey, string keyPath,
> string valueName)
>         {
>             int i = 9999;
>
>             if (RegOpenKeyEx(hKey, keyPath, 0, KEY_ALL_ACCESS |
> KEY_WOW64_32KEY , out hKey) == 0)
>             {
>
>                 // int wlength = value.Length + 1;
>                 i = RegDeleteKeyEx(hKey, valueName, KEY_WOW64_32KEY,
> 0);
>                 RegCloseKey(hKey);
>                 return i;
>
>             }
>             return i;
>         }
>
>     }
>
> }
>
> Where did I go wrong?
>
> many thanks for the help, Chris.

Reply via email to