注册表清理软件ASRClean下载及使用讨论专帖(严禁灌水!)

ASRClean 1.1木鸟定制版下载(更新于2006年6月19日):
小泥巴的博客 ASRClean_v1.1bird.rar (32.68 KB)

这个版本新增了一个功能,详细看/?的使用帮助。另外,这个版本编译时使用了Release选项,可能不再需要MFC运行库的支持。

应ebing同学的要求,将ASRClean及MFC支持库打包上来(暂不包含源程序),ASRClean的支持库文件(DLL文件)可以放到Windowssystem32目录下,也可以与ASRClean.exe在同一目录下(或者搜索路径中)。

ASRClean 1.0相关文件下载:
小泥巴的博客 ASRClean_v1.0.rar (493.2 KB)

ASRClean 1.0源程序下载:
小泥巴的博客 ASRClean-src_v1.0.rar (36.09 KB)

ASRClean使用说明
=====================

由于程序使用了MFC,因此需要MFC的运行库支持(晕啊,本来用VC就是不想要运行库的)。运行库文件如下:
MSVCRTD.DLL
MFC42D.DLL
MSVCP60D.DLL
将上述DLL文件放到%windir%system32目录下即可。

源代码编译环境: Visual C++ 6.0。

木鸟封装工具ASR Tools配套注册表清理工具 – 版本 1.0
作者:Climbing (xclimbing@gmail.com)
日期:2006年5月15日
版权所有 (C) Climbing 2006.
本程序免费提供使用,但由本程序造成的一切损失,作者概不负责!

ASRClean [/ASRList:ListFile] [/OtherList:ListFile] [/Delete:ListFile]
          [/DeleteDriverFile] [/DriverPath:BirdDriverPath]
          [/GenCmd:CmdFile] [/Log:LogFile] [/NoLog] [/NoRegBackup]
          [/Quiet] [/?][/h][/help]

参数说明(所有参数不区分大小写):
/ASRList:ListFile
     由木鸟提供的加入注册表的ASR设备服务列表文件,默认:ASRList.txt
     本程序会检测系统中正在使用的ASR设备服务,并据此将ASRList中没有
     使用的其它服务进行删除。
/OtherList:ListFile
     除ASR设备外,其它加入注册表的设备服务列表文件,默认:OtherList.txt
     本程序会根据服务的ImagePath中是否含有下面的DriverPath来判断该服务是否
     正在使用,如果含有,则认为没有使用,将进行删除操作。
/Delete:ListFile
     由用户直接提供的需要删除的服务列表文件,本程序将根据该文件直接进行服务
     的清除,从而忽略上面两个参数。
/DeleteDriverFile
     删除木鸟的ASR Tools所添加的驱动文件,驱动文件路径由下面的参数提供。
     注1:原则上不推荐用户删除这些文件,否则有可能造成系统不能启动。
     注2:本程序1.0版没有实现直接从程序中删除驱动的操作,只能通过批处理实现。
/DriverPath:BirdDriverPath
     木鸟的ASR Tools所添加的驱动文件所在的目录,默认:BIRD。
     注意:该目录应该在%windir%System32目录下。
/GenCmd:CmdFile
     生成所有清除操作的批处理文件,默认文件名:ASRClean.cmd。
     使用该参数后,本程序将不进行任何清除操作,而是生成对应的批处理文件。
     推荐用户使用该参数!本程序默认直接清除,不生成批处理文件。
/Log:LogFile
     生成日志文件,默认日志文件名:ASRClean.log。日志文件记录了程序所做的所
     有清除操作,这是本程序的默认参数。
/NoLog
     不生成日志文件。不推荐用户使用!
/NoRegBackup
     不备份要清除的注册表内容。本程序默认备份要清除的注册表的内容,推荐备份!
/Quiet
     让本程序静默运行,不产生任何屏幕输出。不推荐用户使用!
/? 或 /h 或 /help
     本使用帮助。

命令示例:
     1. 程序不加任何参数直接运行,相当于命令行:
     ASRClean /ASRList:ASRList.txt /OtherList:OtherList.txt /Log:ASRClean.log

     2. 从ASRList.txt及OtherList.txt中输入添加的服务列表,删除驱动文件,将所有
        清除操作生成ASRClean.Cmd,不产生用户显示及日志文件。命令行如下:
     ASRClean /GenCmd /DeleteDriverFile /NoLog /Quiet

     3. 从asr.txt及other.txt中输入添加的服务列表,并生成MyClean.cmd批处理文件,
        同时记录程序日志到ASRClean.log中。命令行如下:
     ASRClean /ASRList:asr.txt /OtherList:other.txt /GenCmd:MyClean.cmd /log

===================================================================

用xplode调用ASRClean大概是这个样子:

<item display=”? 清除注册表中多余的ASR设备驱动”>
     <execute display=”? 正在清除注册表中多余的ASR设备驱动,请稍候…”>
     <program>#XPLODE#ASRClean.exe</program>
     <!– <arguments>/ASRList:ASRList.TXT /OtherList:OtherList.txt /Quiet</arguments> –>
     <hide>true</hide>
     <wait>true</wait>
     <workdir>#XPLODE#</workdir>
    </execute>
</item>

上面的#XPLODE#相当于XPLODE所在的目录,默认情况下当然就是C:ASRTools目录了,你可以根据情况自己定义。

==================================================================

再公布我写的两个批处理,其中的StartCheck.cmd调用CheckSCSI.cmd,二者合作生成一个SCSIToDel.txt。这个TXT文件中保存的就是当前系统中所有的ASR设备服务列表(相当于ASRList.txt,专门为S&R&S封装的系统清理驱动所定制的),在使用S&R&S封装的系统上,使用这两个批处理生成SCSIToDel.txt,然后改名成ASRList.txt,跟ASRClean.exe放在同一目录下,那么ASRClean就可以用来清理使用S&R&S封装的系统中的无效注册表项。 下载链接如下(命名为CheckSCSIServiceList.rar):

打开附件

其实完全可以将上面两个批处理合成一个批处理(总是习惯用老的方式写批处理,其实新方式更简单),信息显示上还有所增强,推荐使用下面的批处理代替上面两个批处理:
CheckScsiServiceList.cmd:检查并输出当前系统中所加载的SCSI设备服务列表

:: CheckScsiServiceList.cmd   检查并输出当前系统中所加载的SCSI设备服务列表
:: 作者:Climbing (xclimbing@gmail.com)
:: 日期:2006.05.26
:: 注:输出文件可以作为ASRClean的/ASRList输入参数,用于清除死性不改S&R&S系列软件所添加的S&R&S设备驱动注册表项
@echo off
set dstfile=%1
if “%1″==”” set dstfile=SCSIServiceList.txt
if exist %dstfile% del /f /q %dstfile%
for /F “usebackq tokens=5 delims=” %%I in (reg query "hklmSYSTEMCurrentControlSetServices") do if not %%I#==# call :_CheckSCSI %%I
notepad %dstfile%
goto :eof

:_CheckSCSI
set svc=%1
if %svc%#==# goto :eof
echo Checking %svc%…
reg query “hklmSYSTEMCurrentControlSetServices%svc%” /v Group 2>nul | find /i “scsi miniport” >nul 2>nul
if %errorlevel%==0 echo !!!Add %svc%!!!   && echo %svc%>> %dstfile%

==============================================================
[2006.05.30]先祝大家端午节快乐!

有很多人找我要我清除驱动的批处理,其实我以前都发过,只是没有多少人留意,然后很快被淹没在汪洋大海之中(灌水的毛病真是要不得,什么时候我们的技术论坛没有了灌水习惯那可真是一大进步)。这次我一并将这些东西都公布到这里:

1、sysprep.cmd:放在c:sysrep目录下,在封装时运行

@echo off
start /wait msprep.exe
reg export “HKEY_LOCAL_MACHINESYSTEMSetup” sxbgprep.reg
reg add “HKEY_LOCAL_MACHINESYSTEMSetup” /v CmdLine /t REG_SZ /d autohalx.cmd /f

2、autohalx.cmd:放在%windir%目录下,即与死性不改的autohal.exe在同一目录

:: autohalx.cmd by Climbing(xclimbing@msn.com)
:: Date: 2006.02.17
:: 基于死性不改的S&R&S 9.5.1118而制做,用于在死性不改的autohal.exe与用户之间建立一个接口。
:: 目标:本程序放置于注册表[HKLMSystemSetup]目录下CmdLine这一行,用于替换死性不改设置的autohal /msprep命令,
:: 但本程序运行的最后一步将恢复死性不改的注册表设置,从而实现死性不改的封装程序运行之前为用户设置一个自定义接口。
@echo off

set sys32=%systemroot%system32
set drives=C D E F G H I J K L M N O P Q R S T U V W X Y Z
set sysprepdir=%systemdrive%sysprep

:: 复制用户自定义sysprep.inf到c:sysprep目录
for %%i in (%drives%) do if exist %%i:sysprep.inf copy /y %%i:sysprep.inf %sysprepdir% > nul

:: 执行用户自定义的批处理文件,文件名xyfprep.cmd,一般用于清理原系统中的硬件信息
for %%i in (%drives%) do if exist %%i:xyfprep.cmd call %%i:xyfprep.cmd

:: 恢复死性不改的注册表设置
regedit /s %sysprepdir%sxbgprep.reg

3、xyfprep.cmd:放在目标机器克隆系统可访问的任意分区的根目录下(跟自定义的sysprep.inf在一起即可),我这里放出驱动自解压、清理母系统幽灵硬件部分等内容,你可以根据需要任意扩充这个批处理的内容,只要你会写批处理。这个批处理会由前面的autohalx.cmd自动调用执行,可以有多个(即每个分区根目录都可以放一个)。

@echo off

::驱动自解压
set drivers=e:drivers.exe
set drvdir=e:syssoftdriversbird
if not exist %drvdir%. md %drvdir%
“c:Program Fileswinrarwinrar” x -o+ -y %drivers% %drvdir%
%drvdir:~0,2%
cd %drvdir%
call %drvdir%setdpath.exe
move /y %drivers% %drvdir%

::清除母系统的原机器硬件,需要根据母系统自行定义
reg delete HKLMSYSTEMCurrentControlSetEnumACPI /f
reg delete HKLMSYSTEMCurrentControlSetEnumDISPLAY /f
reg delete HKLMSYSTEMCurrentControlSetEnumFDC /f
reg delete HKLMSYSTEMCurrentControlSetEnumHID /f
reg delete HKLMSYSTEMCurrentControlSetEnumIDE /f
reg delete HKLMSYSTEMCurrentControlSetEnumISAPNP /f
reg delete HKLMSYSTEMCurrentControlSetEnumLPTENUM /f
reg delete HKLMSYSTEMCurrentControlSetEnumSERENUM /f
reg query “HKLMSYSTEMCurrentControlSetEnumPCI” | find “VEN” > ~dev2del.txt
if exist ~dev2del.txt for /F “tokens=*” %%i in (~dev2del.txt) do reg delete “%%i” /f
reg delete HKLMSYSTEMCurrentControlSetEnumPCIIDE /f
::reg delete HKLMSYSTEMCurrentControlSetEnumSCSI /f
reg delete HKLMSYSTEMCurrentControlSetEnumSTORAGE /f
reg delete HKLMSYSTEMCurrentControlSetEnumSW /f
reg delete HKLMSYSTEMCurrentControlSetEnumUSB /f
::reg delete HKLMSYSTEMCurrentControlSetEnumPCI_HAL /f
reg delete HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumRoot*PNP0501 /f
reg delete HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumRootLEGACY_VGA /f
reg delete HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumRootMEDIA /f
reg query “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumRoot” | find “*” > ~dev2del.txt
if exist ~dev2del.txt for /F “tokens=*” %%i in (~dev2del.txt) do reg delete “%%i” /f
if exist ~dev2del.txt del /f /q ~dev2del.txt

:: 恢复系统的默认管理共享
reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /v AutoShareServer /t REG_DWORD /d 1 /f
reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /v AutoShareWks /t REG_DWORD /d 1 /f

::设置Wireless Zero Configuration服务为自动启动
REG ADD “HKLMSYSTEMCurrentControlSetSERVICESWZCSVC” /v Start /t REG_DWORD /d 1 /f

:: 禁用虚拟光驱Daemon和Alcohol所用的服务,防止产生冲突
REG ADD “HKLMSYSTEMCurrentControlSetSERVICESa347bus” /v Start /t REG_DWORD /d 4 /f
REG ADD “HKLMSYSTEMCurrentControlSetSERVICESa347scsi” /v Start /t REG_DWORD /d 4 /f
REG ADD “HKLMSYSTEMCurrentControlSetSERVICESd346bus” /v Start /t REG_DWORD /d 4 /f
REG ADD “HKLMSYSTEMCurrentControlSetSERVICESd346prt” /v Start /t REG_DWORD /d 4 /f

[2006.06.07补充内容:]

我觉得有必要讲一下上面这个删除幽灵硬件的批处理(xyfprep.cmd)该如何根据实际情况自己调整(DIY)的方法:

一般来说,在克隆恢复成功后,进入设备管理器,查看隐藏设备(下面讲的那个DEVMGR_SHOW_NONPRESENT_DEVICES环境变量事先已经设置好了),你会在某些设备文件夹下发现幽灵硬件(基本上可以认为这些幽灵硬件都是原系统中的硬件),注意,声音那个文件夹除外。双击幽灵硬件-> 详细信息,你会看到“设备范例ID”,例如:STORAGEREMOVABLEMEDIA7&E3F8038&1&RM、或者USBSTOR….、或者ACPI…等等,而ID中的STORAGE、USBSTOR、ACPI这些ID信息对应的就是“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum”下相应的文件夹,对于这些硬件ID你可以直接使用reg delete命令删除对应的注册表信息(这就相当于删除了幽灵硬件)。例如:

reg delete “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumSTORAGERemovableMedia7&E3F8038&1&RM” /f

其实你可以发现,STORAGE中保存的都是原机器中的存储卷信息,在新系统中是完全可以删除的,所以你可以直接在批处理中:
reg delete “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumSTORAGE” /f
将它完全删除,而事实上,我的批处理就是这么整理出来的。

====================================================================
[2006.05.31] 查看幽灵硬件的方法

下面提供一下查看幽灵硬件必须设置的DEVMGR_SHOW_NONPRESENT_DEVICES环境变量的js设置脚本:
————————————————————————————————————————————–
// DEVMGR_SHOW_NONPRESENT_DEVICES.js 设置环境变量并启用设备管理器查看幽灵硬件
// Author: Climbing (xclimbing@gmail.com)
var shell
shell = WScript.CreateObject(“WScript.Shell”)
shell.Environment(“System”).Item(“DEVMGR_SHOW_NONPRESENT_DEVICES”)=’1′
shell.run(“devmgmt.msc”)
————————————————————————————————————————————–

将上面横线中的内容复制并粘贴到一个空白的文件中,保存文件为DEVMGR_SHOW_NONPRESENT_DEVICES.js,双击执行即可。这个脚本设置完成环境变量后,会自动打开设备管理器,记得勾选“查看”菜单中的“显示隐藏的设备”选项。

发表评论

电子邮件地址不会被公开。 必填项已用*标注