通过Windows注册表来实现开机时文件替换
文章目录
- 为什么需要通过注册表来实现开机时文件替换?
有一些文件,被系统的一些服务所独占,我们在热备份与热恢复系统的时候,没有办法直接替换掉。
也有一些程序以独占的方式(exclusive access)打开某个文件,在这个程序退出之前,按常规的方法,我们是不能替换掉这个文件。
这些情况下,我们可以通过注册表 (Windows Registry) 记录下需要替换的文件等相关信息,在下一次开机、应用程序启动之前进行替换掉。
- 具体的实现方法
记得在进行以下步骤之前,先备份一下你的注册表。
下面就以用放在目录 C:\Temp 下的 Win32k.sys 文件,替换系统目录 %SystemRoot%\System32 下的 Win32k.sys 文件为例,详细介绍一下利用注册表来实现开机替换文件的操作。你可以通过这种方法来替换掉你 Windows 系统里的任何文件,当然,你的 Windows 应该是要能启动的。
1. 启动注册表编辑器 (regedit.exe);
2. 按下面的路径,在注册表里找到相关的key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
3. 在 Session Manager 这个注册表目录下,通过以下方式新建一个值 (value):
值名称(Value name):
PendingFileRenameOperations
类型(Data type):
REG_MULTI_SZ(多字符串值)
值数据(Value data):
??\c:\temp\win32k.sys
!??\c:\winnt\system32\win32k.sys
这里要特别注意,一定要分两行来填写值(填完后在注册表里会显示成一行),并且那个”!”必须放在第二行的开头。
这种表达方式是用前面路径的文件来代替后面路径的文件。
4. 退出注册表编辑器;
5. 重新启动系统。
重启 Windows 系统后,如果第二个文件存在,则会把第一个文件的内容替换到第二个文件里,第二个文件的文件名保持不变,并且删除第一个文件;如果系统里原来就没有对应的第二个文件,则系统会自动新建一个和第二个文件名一模一样的文件,再把第一个文件里的内容拷贝进去。替换动作完成后,系统会自动清除注册表里添加的 PendingFileRenameOperations 值。
如果是要批量替换多个文件,则只需要按上面的值数据形式,在注册表变量值数据里添加要替换的多个文件信息即可,例如:
??\c:\test2\test2.txt
!??\c:\test1\test1.txt
??\c:\test2\test22.txt
!??\c:\test1\test11.txt
如果你的机器用上面的办法替换文件出错,则重点检查上面第三步的表达式是否有误。
除了往注册表里塞东西这个方法以外,你还可以使用Windows自带的mv.exe工具,或是下载与使用Inuse.exe工具,这些工具的详细使用方法,可以看帮助说明。
文章作者 cookwhy
上次更新 2009-08-26