WinPE下如何添加注册表信息
在为PE添加外置程序时有时需要为添加的程序写入注册表信息,如何能做到这一点呢?
使用 Regsnap 等在标准的 Windows 环境下跟踪分析出软件要添加到注册表中的内容,然后将注册表修改条目导出,并改写成批处理文件,保存到软件所在的目录中。
比如对 ACDSEE 这各程序的注册信息跟踪后就保存在:
X:PROGRAMS图形图像ACDSEEACDSEE.CMD
建议参照 X:PROGRAMS图形图像ACDSEE 这个程序的保存方式保存你要添加的软件,原则是与主程序集中到相同目录存放(包括可能要用到的图标文件),以便日后维护修改。并参照 其中的 ACDSEE.CMD 这个注册批处理的格式和样式创建你自己应用程序的注册批处理文件。
注意:为了保证 PE 环境和标准 Windows 环境下调用这些脚本都能够运行,因此我们要检测程序所在的实际路径或所在的盘符。
创建批处理时,最前面的两行就是用于检测当前目录位置的,要保留并引用其中的变量:
SET Var0=%0
FOR /f "delims=" %%I in ("%Var0%") do Set OP=%%~dpI
上述两行的作用是通过检测当前批处理所在的路径获得所在分区的盘符,从而在后面的批处理中使用 %OP% 作为外挂程序路径中要使用的所在的分区号。 %OP% 只与所在的盘符相关,与路径无关,因此你的批处理中要在盘符变量 %OP% 后加上详细的路径。比如:
REG ADD HKCRACDC_JIFShellACDSEEenCommand /ve /t REG_SZ /d ""%OP%ACDSEE.EXE" /v" /f>NUL
上述命令可在注册表中添加一条注册信息。
注意:当上述路径检测命令中,Set OP=%%~dpI 时,变量 %OP% 后面不必再添加“”。如上面的 %OP%ACDSEE.EXE 。
也可使用 Set OP=%%~dI,与上面相比,仅仅是将其中的 ~dpI 改成了 ~dI,此时变量将不扩充到当前路径,而只扩充到当前盘符。因此如果这样使用,你必须在变量后加上程序的完整路径。比如:
%OP%PROGRAMSTOTALCMDRUNTC.EXE