应用中需要对MSSoap3.0的安装情况检测,使用下面的代码:BOOL blResult=TRUE;
CRegKey keyVersion;
HRESULT lResult = keyVersion.Open(HKEY_CLASSES_ROOT,"MSSOAP.SoapClient30\\Clsid");
if (FAILED(lResult))
blResult=FALSE;
else
{
char szVersion[256];
DWORD dwSize=256;
HRESULT lResultQuery = keyVersion.QueryValue(szVersion,"(默认)",&dwSize);
if (FAILED(lResult))
blResult=FALSE;
keyVersion.Close();
}
return blResult;返回的是真,因为系统已经安装了MSSOAP3.0,而且存在这样键。但在没有安装的系统中检测,也返回真,事实上,系统中根本就不存在上面的键。为什么?该如何解决?

解决方案 »

  1.   

    我用你的思路测试过没问题,不过我用的是 RegOpenKeyEx 和 RegQueryValueEx
    另外,HRESULT lResultQuery = keyVersion.QueryValue(szVersion,"(默认)",&dwSize); 有个错误:读取默认值应该如此
    HRESULT lResultQuery = keyVersion.QueryValue(szVersion,"",&dwSize);
      

  2.   

    我简单写了点儿测试代码如下 CString sCLSID; HKEY hRegKey;
    long nRet = RegOpenKeyEx(HKEY_CLASSES_ROOT,"MSSOAP.SoapClient.1\\Clsid",0,KEY_EXECUTE,&hRegKey); if(hRegKey)
    { BYTE byteCLSID[256];
    DWORD dwSize = 256;
    if(RegQueryValueEx(hRegKey, _T(""),0,NULL,byteCLSID,&dwSize)==ERROR_SUCCESS)
    {
    sCLSID = byteCLSID;
    MessageBox(sCLSID,"Regstry",MB_OK);
    }
    else
    MessageBox("MS SOAP3 CLSID 没有找到!","Regstry",MB_OK); RegCloseKey(hRegKey);
    }
    else
    MessageBox("MS SOAP3 没有找到!","Regstry",MB_OK);
      

  3.   

    跟踪一下你的两个 if (FAILED(lResult))
    看它转到哪里去了
    另外,根据 lResult 可以用 FormatMessage 得到错误信息
      

  4.   

    piggybank(吞硬币的小猪) ( ) I agree with you