最近将系统从XP升级到win7到专业版,发现原来用delphi 7开发的系统确认登录后出现以下错误提示Debugger Exception Notification
---------------------------
Project MYProject.exe raised exception class ERegistryException with message 'Invalid data type for 'UserPreferencesMask''. Process stopped. Use Step or Run to continue.
---------------------------找了两天原因,还是没找出问题所在,希望有高手能帮忙解决一下,分不够可以加!

解决方案 »

  1.   

    把DELPHI7设置为系统管理员运行试试。
      

  2.   

    提示得很明显嘛,LZ你读取那个注册表键值时,使用的格式不对,
    HKEY_CURRENT_USER\Control Panel\Desktop\UserPreferencesMask
    有可能是REG_DWORD类型,或有可能是REG_BINARY类型,这个你要判断一下。
      

  3.   

    按提到的注册表键值我看了一下
    我的UserPreferencesMask是REG_BINARY,值为9e 3e 07 80 12 00 00 00
    应该用REG_DWORD类型吗?若是,其值该写多少呢?
      

  4.   

    那就应该按照REG_BINARY格式去读取
    TRegistry.ReadBinaryData
    或API:RegReadBinary
      

  5.   

    注册表异常:无效的数据类型
    看看具体的类型是什么,都有对应的读/写方法的REG_BINARY是2进制,用ReadBinaryData/WriteBinaryData
      

  6.   

    可我的程序中没有读这个注册表信息的代码呀,只是对主窗体最大化时就出现这个错误提示了,Tform自已有一段这样的读注册表的代码?
      

  7.   

    原来如此!看来是应该是你原来在D7下使用的某个三方控件(猜测是做窗体动态效果的)对Win7系统不兼容,需要更新到高版本来解决。或者先把窗体效果的相关代码关掉试试。
      

  8.   

    感谢JPEXE和kaikai_kk的解答,我参照XP的UserPreferencesMask值修改WIN7的UserPreferencesMask值后就没有出错提示了,重启后也正常!
      

  9.   

    你这个做法不具备通用性,除非这个程序就只是你自己用。如果要给其它用户使用,你总不可能去修改所有用户的UserPreferencesMask值吧。
      

  10.   

    我也碰到这个问题了,应该是用到了xpman的问题