中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 大虾级问题,关键词:批处理、注册表。期待斑竹!
作者:
标题: 大虾级问题,关键词:批处理、注册表。期待斑竹! 上一主题 | 下一主题
shgengen
新手上路





积分 8
发帖 2
注册 2006-4-4
状态 离线
『楼 主』:  大虾级问题,关键词:批处理、注册表。期待斑竹!

各位大虾,小弟弟第一次来,问一个对我来说很深的问题。
实现效果:
每次重新启动,系统便会调用备份的注册表。在系统启动后所作的一切注册表修改,都会在系统重新启动后调用备份的注册表。
要求在win98、win2K、winxp、win2k3都能实现

本人想的思路是:
利用批处理
删除整个注册表
调用备份注册表

但是本人能力有限,无法实现,期待高手的出现。

2006-4-4 16:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

OH ,MY GOD.....不知道是楼主发烧还是我发烧.........删除注册表?????在说一句“OH ,MY GOD!"

2006-4-4 17:43
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 3 楼』:  

为什么要备份和恢复整个注册表呢?如果是我会有选择地备份。。
不过按照你的思路可以提供方法给你:
备份注册表的命令: regedit /e c:\bak.reg
导入注册表的命令: regedit /s c:\bak.reg
虽然regedit命令在98和XP下都能运行,但是对于XP来说,涉及到权限等等情况,也许不一定能恢复成功(这只是我的意见。)
如果是98的话建议你只是备份System.dat和User.dat就行了,然后等想恢复的时候再恢复。
毕竟每次启动的时候恢复注册表是要等上一段时间的。
ps:个人认为这个问题还算不上什么大虾级的问题吧。。

2006-4-4 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

xp也能通过直接备份注册表文件的方式来备份注册表,不过前提是xp没有在运行状态。而恢复备份的注册表,也是同样的要求。

个人认为,这确实不是一个大虾级的问题。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-4-4 18:08
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
lpclimber
初级用户





积分 168
发帖 85
注册 2005-8-26
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by 3742668 at 2006-4-4 17:54:
备份注册表的命令: regedit /e c:\bak.reg
导入注册表的命令: regedit /s c:\bak.reg

我也看到过别人提到一个 regedit -m打开两个regedit.exe

请问 regedit 的这些参数是如何获得的?
我到微软官方网站搜索,找了很久就是找不到全面介绍这些参数的~~

2006-4-5 00:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  

DOS下regedit /?
我以前用98的时候专门看过的,所以还有点印象,不过在XP的命令行中运行regedit /?看不出来了,但是regedit /s和regedit /e还是能执行。

2006-4-5 00:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shgengen
新手上路





积分 8
发帖 2
注册 2006-4-4
状态 离线
『第 7 楼』:  

也许本人没有叙述清楚
本人的意思就是
在装好系统和应用软件后,系统交给用户使用,使用户不能通过安装应用程序往注册表中添加信息。即使安装了需要往注册表中添加信息中的软件,在重新启动后,也会因为注册表被复原而无法正常运行。。。(绿色软件除外)

按照3楼的意见,是 不是可以在系统运行前,在组策略中执行批处理命令
regedit /s e:\bak.reg
注释:bak.reg为系统安装后导出的注册表。这样,每次重新启动系统,使用的就是bak.reg了。
但是我在考虑这样的问题,假如用户在注册表中添加了新的信息后,再导入bak.reg,是不是会引起系统错误,(新添加的信息是否被清除)

2006-4-5 08:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  

首先,如果你的注册表中更改了设置时,导入bak.reg会修改为bak.reg中的值,但是如果键是添加上去的,导入bak.reg的时候并不会删除已经建立的值(这也是为什么我说在98系统下最好是备份和恢复system.dat和user.dat的原因)。在98下面我们可以在autoexec.bat或win.bat等中恢复system.dat和user.dat来实现真正地恢复注册表的目的,但是在XP下此方法并不实用。而且随着软件的变化而注册表不相映地配置得当的话,可能会导致软件无法正常使用等等莫名其妙的情况。所以基本上是不要干这种吃力不讨好的事情,至于实现你想实现的目的,在XP环境中你只需要建立一个权限比较低的用户就可以了,比如users组的就可以。如果你硬是要自己来修改注册表的话也不是不行,你可以每次先导处注册表,然后利用批处理把每个以"["开头的行提取出来,再在提出的文件的第二个有效字符前插入一个减号"-",比如原内容为:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
只需要改为
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
就行了,然后再把更改过的reg文件导入,这就实现了删除所有子键(当然,你也可以直接把各个根键下的子键名记下来,然后在批处理中直接删除这些子键即可)。
删除键后再把bak.reg导入即可。
还是不推荐用这种最笨最没有效率且最危险的方法来维护安全。

2006-4-5 10:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lpclimber
初级用户





积分 168
发帖 85
注册 2005-8-26
状态 离线
『第 9 楼』:  

再学习一下~~

2006-4-5 13:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 10 楼』:  

装个硬盘保护卡倒是相当的简单。也能满足楼主的需要。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-4-5 18:33
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 11 楼』:  

regedit /c 好像可以用.reg重建注册表

2006-5-11 13:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 12 楼』:  

Re shgengen:

      根据你在7楼需求描述,感觉与网吧系统的维护有些相似性。这种情况下,通常是不会采用恢复注册表的方式来限制非绿色应用程序的使用的,这种方法除了复杂度大、兼容性差、危险性高等缺点外,还具有易产生冗余文件的缺陷。因此,此类需求通常采用以下方案。

      一、Climbing兄在10楼提到的硬盘保护卡或者硬盘还原类软件,对系统盘进行写保护,使之每次启动后可以自动恢复初始状态,绿色软件可以安装在非系统盘而不受影响。

      二、使用类似一键还原的自启动型镜像还原软件,预先对系统盘进行备份,在系统盘发生较大变化后进行恢复。因为恢复所需时间较方案一长很多,所以恢复周期也需要适当加长,比如每天的第一次启动时恢复,而非每次启动时恢复。

      另外,Win9x下有现成的恢复注册表工具,scanreg.exe/scanregw.exe,将 scanreg /restore 写入到 autoexec.bat 中,或者将 scanregw /restore 写入到注册表的 run 启动项下,可以使其启动时自动恢复注册表。

[ Last edited by willsort on 2006-5-11 at 19:36 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-5-11 19:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 13 楼』:  

用regedit的导入、导出功能涉及到数据表示的转换(二进制数据<->纯文本数据)。在典型配置中,每次启动对整个注册表做这样的转换,耗时太过巨大了。还不如用磁盘映像恢复合算,除非你磁盘IO巨慢但CPU巨快(一个是计算密集型一个是IO密集型)。

如果仅仅要完整恢复注册表,用文件覆盖是最简单高效的做法,但是NT Kernel的OS要在系统启动(注册表文件被装载并锁定)前执行覆盖比较麻烦,好像有两种办法

【方法一】
    1. 开机自检
    2. 从MBR装入boot manager,发现是单数次启动
    3. 装入一个独立的DOS系统
    4. [可选]装入NTFS文件系统驱动
    5. 用备份的注册表文件覆盖系统文件
    6. 重启机器,再次装入boot manager,发现是偶数次启动
    7. 装入NT/2k/XP/2k3

显然,这个方案必须有个支持某些非易失标志位判断的boot manager。

【方法二】
    1. 开机自检
    2. 从MBR启动独立的DOS系统
    3. [可选]装入NTFS文件系统驱动
    4. 用备份的注册表文件覆盖系统文件
    5. 加载GRUB4DOS,并用它加载NT系列OS

就是不知道GRUB4DOS能不能直接在DOS下加载NT Kernel。就算可以,似乎也要吃掉最少1M左右的内存。

2006-5-11 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: