zoukankan      html  css  js  c++  java
  • 注册表操作

      今天遇到一个问题,因为同时在写两个工具,在一个工具中我下面的这段代码是可以正常执行并且获取结果的。

        HKEY hKey;
        DWORD result = 0;
        DWORD dwFlag;
        CString strMsg;
    
        
        result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Store"), 0, KEY_EXECUTE, &hKey);
        if (result != ERROR_SUCCESS){
            if (result == ERROR_FILE_NOT_FOUND){
                dwFlag = 0;
            }
        }
        else{
            DWORD lsize;
            TCHAR *value = (TCHAR *)malloc(1024);
            result = RegQueryValueEx(hKey, _T("Test"), NULL, NULL, (LPBYTE)value, &lsize);
            if (result != ERROR_SUCCESS){
                if (result == ERROR_FILE_NOT_FOUND){
                    dwFlag = 0;
                }
            }
            else{
                CString strConsumerValue = _T("XXXX");
                CString strCommercialValue = _T("XXXXX");
                if (strConsumerValue.CompareNoCase(value) == 0){
                    dwFlag = 1;
                }
                else if (strCommercialValue.CompareNoCase(value) == 0){
                    dwFlag = 2;
                }
                else{
                    dwFlag = 0;
                }
            }
        }

    但是我换到另外一个工具上去用,RegQueryValueEx的返回值一直是2.用Error Lookup看一下这个错误码代表说找不到指定的文件或路径。

    这就奇怪了,明明在同一台测试机上,为什么两个程序,同样的代码会有不同的结果呢?

    然后在编译的过程中我突然发现,第二个程序是32位的,而第一个程序是64位的,这就给我带来了一条新的线索,因为以前开发过程中有碰到过因为32位和64位程序而出现不同行为的情况。

    果真,还真是这个原因。

    因为32位程序在访问注册表的时候,会默认打开32位的注册表,而路径与64位的注册表不同。所以导致怎么都找不到。

    在RegOpenKeyEx中加上KEY_WOW64_64KEY之后就能够正常访问了。

    正常访问的代码如下:

    	HKEY hKey;
    	DWORD result = 0;
    	DWORD dwFlag;
    	CString strMsg;
    
    	result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Store"), 0, KEY_EXECUTE|KEY_WOW64_64KEY, &hKey);
    	if (result != ERROR_SUCCESS){
    		if (result == ERROR_FILE_NOT_FOUND){
    			dwFlag = 0;
    		}
    	}
    	else{
    		DWORD lsize;
    		TCHAR *value = (TCHAR *)malloc(1024);
    		result = RegQueryValueEx(hKey, _T("XXXXXX"), NULL, NULL, (LPBYTE)value, &lsize);
    		if (result != ERROR_SUCCESS){
    			if (result == ERROR_FILE_NOT_FOUND){
    				dwFlag = 0;
    			}
    		}
    		else{
    			CString strConsumerValue = _T("XXXXXX");
    			CString strCommercialValue = _T("XXXXXX");
    			if (strConsumerValue.CompareNoCase(value) == 0){
    				dwFlag = 1;
    			}
    			else if (strCommercialValue.CompareNoCase(value) == 0){
    				dwFlag = 2;
    			}
    			else{
    				dwFlag = 0;
    			}
    		}
    	}
    

      

  • 相关阅读:
    poj 2481
    poj 3928 Ping pong
    再见oi
    NOIP 2014 解方程
    poj1836:Alignment
    poj2479:Maximum sum
    tyvj1510:专家复仇
    tyvj:P1467 通向聚会的道路
    tyvj1176: 火焰巨魔的惆怅
    tyvj1326:剑人合一
  • 原文地址:https://www.cnblogs.com/javametro/p/6251982.html
Copyright © 2011-2022 走看看