哎,不是搞到我头痛,真不想劳烦大家,简单几行代码,不知道哪里有问题,也许还不是DELPHI可以解决的问题呢代码我就不贴了,代码应该不会有问题,功能是1.从资源文件中释放屏保文件(.src)到c:\windows\system32下,2.修改注册表相应键值,以达到修改屏保设置指定到那个.src。网络环境:工作组,A机为服务器2003 安装了landesk桌面管理系统,B机为客户端 XP,
在A机运行,OK,拷贝至B机运行OK,可是通过A机的landesk软件(桌面管理系统)远程分发该程序到B机运行,结果释放文件没有问题,修改注册表就是不成功,也没有提示错误,怪了????测试1 在程序上加了个查看该键值的按钮,在分发该程序到B机运行,在执行释放文件和修改注册表后,点击查看键值的按钮,显示的结果是已修改后的键值,可运行regedit查看注册表,该键值却并没有改变,难道我的程序修改查看的注册表是临时的表??晕,那直接运行程序怎么就能改呢测试2 在测试1通过分发的程序没有关闭的情况下,我同时运行拷过来的同一程序,点击查看键值按钮,显示的是注册表里的键值,我又再再再再点分发来的程序窗口中的按钮,显示的仍然是修改后的值。我分析了瑞星原因?不太可能,都没有提示,权限问题?更不可能,如果是那为什么点击查看按钮显示的是修改后的值呢。难道它修改的是一个临时的,缓存中的注册表,不知道不知道大侠们,高手们,帮我分析一下解决一下啊

解决方案 »

  1.   

    不是,其实我还做了另一个按钮,显示注册表的一个键值(computer name)
      

  2.   

    我也想过landesk的问题,可是程序是由landesk拷贝到本地运行的,如果是landesk的问题,问题出在哪里呢,软件分发为什么会导致我的程序出现这种问题呢
      

  3.   

    代码不帖是因为程序在本机直接运行(试了好几台)没有一点问题,
    建注册表对象,指定RootKey,OpenKey,WriteString,closekey,释放对象。帮忙顶啊,就算是landesk的问题,也请说说道儿啊
      

  4.   

    我突然发现了一点眉目,请大家研究,我看了下注册表,原来我代码中修改的注册表是HKEY_CURRENT_USER\Control Panel\Desktop\SCRNSAVE.EXE键值,当前用户是具有管理员权限的用户(不是administrator用户),而landesk是通过administrator用户登录并分发程序的这个主键是当前用户的配置,本机运行我的程序时,没有问题,而分发而来的程序,虽然是对HKEY_CURRENT_USER\Control Panel\Desktop\SCRNSAVE.EXE进行操作,但实际却不是,而是对hkey_users\.default\control panel\desktop\scrnsave.exe进行修改,
    目前我的解决思路是:
    1.能否通过修改注册表其它位置来解决屏保设置
    2.通过API函数来解决,正在找这个函数
      

  5.   

    到注册表的HKEY_USES节点下的第一个子节点中修改,而不是只修改当前用户的。前提是你拥有足够的权限。
      

  6.   

    照楼上的方法,我试着用手动的方法修改.default下的相应键,修改完后,并没有对当前用户有效啊,重启也一样,当前的用户的配置就在HKEY_USES下的某个节点上,如何修改键值,直接对所有用户有效呢
      

  7.   

    你可以修改除.default以外,所有SID相对应的键值。
      

  8.   

    我也想啊,可是TRegistry对象的openkey方法如何定位所有用户SID位置呢,它们的键名又没有规律
      

  9.   

    可以通过API枚举系统当中的用户SID