如何用批处理修改注册表的权限呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用批处理修改注册表的权限呢?相关的知识,希望对你有一定的参考价值。
我用setacl2.0.2.0该注册表权限的时候遇到问题了。。。
我英文不好,作者写的语法我看不懂,麻烦帮我解释一下下吧。。。
比如我想要改
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL"
和“HKEY_CLASSES_ROOT\.exe”
这个两个键值,该怎么写呢?
这是setacl的下载地址:
http://sourceforge.net/project/showfiles.php?group_id=69165&package_id=68032
谢谢。
这个两个键值都改为everyone只读.
我试着写了下面的代码,返回信息成功,但是注册表键值没有放映,还是原来的一样。
@echo off
:again
set UpdatePolicy=GPUpdate /Force>nul 2>nul
setacl -on "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL" -ot reg -ace "n:everyone;p:read;m:revoke;w:dacl" -op "dacl:p_nc" -rec no
setacl -on "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL" -ot reg -ace "n:everyone;p:read;m:aud_fail;w:sacl" -op "sacl:p_nc" -rec no
%UpdatePolicy%>nul 2>nul
ENDLOCAL
pause
goto again
--创建
创建分为两种,一种是创建子项(Subkey)
注:如果你对注册表的命名不是很清楚,可以看看注册表命名标准手册(http://www.sometips.com/tips/registryhack/204.htm)
我们创建一个文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\下创建了一个名字为“Test4Adam”的子项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]
"Test1"="Adam"
"Test2"=hex:61
"Test3"=dword:00000064
Test1的类型是“String Value”
Test2的类型是“Binary Value”
Test3的类型是“DWORD Value”
注意:如果你的注册表中不存在Test4Adam这个子项,那么该脚本会为你创建该子项。
--修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入即可,在此我就不再赘述。
--删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]
"Test1"=-
执行该脚本,HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam下的"Test1"就被删除了;
我们再看看删除一个子项,我们创建一个如下的脚本:
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]
执行该脚本,HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam就已经被删除了。
相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。就像上面那个例子:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]
"Test1"="Adam"
"Test2"=hex:61
"Test3"=dword:00000064
只需要这样:
@echo Windows Registry Editor Version 5.00>>test.reg
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Test4Adam]>>test.reg
@echo "Test1"="Adam">>test.reg
@echo "Test2"=hex:61>>test.reg
@echo "Test3"=dword:00000064>>test.reg
================================================
一、RegWrite(写入或新建注册表数据)
* 新建子主键
语法为:WshShell.RegWrite "子主键名\"
例如,我们想新建一个子主键“HKEY_CURRENT_USER\MyReg”,可使用如下的语句:
WshShell.RegWrite "HKCU\MyReg\"
说明:子主键名必须以反斜线 (\) 结束,若不小心忘记输入了这个(\),则该方法返回的是键值,即表示你是想在 HKEY_CURRENT_USER\下建立了一个名叫MyReg的键值了。这一点一定要十分注意!
注意引号里子主键的开头必须是下列根键名之一:
HKEY_CURRENT_USER(可简写为HKCU)、HKEY_LOCAL_MACHINE (HKLM)、HKEY_CLASSES_ROOT(HKCR)、 HKEY_USERS和HKEY_CURRENT_CONFIG
* 在子主键下建立新的键值(或改写已有的键值的数据)
语法为:WshShell.RegWrite "子主键名\键值名","键值的数据","键值的类型"
例如我们想在子主键“HKEY_CURRENT_USER\MyReg” 下新建一个字符串键值KeyValue,设置键值的数据为“str”,可使用如下的语句:
WshShell.RegWrite "HKCU\MyReg\KeyValue", "str"
(注:键值为字符串值,可省去"键值类型"的声明)
若所建的为二进制值或DWORD值,数据为“1”,则还必须声明键值的类型,如下:
WshShell.RegWrite "HKCU\MyReg\KeyValue",1,"REG_BINARY"
WshShell.RegWrite "HKCU\MyReg\KeyValue",1,"REG_DWORD"
注意二进制值和DWORD值的数据不能加引号,而字符串值的数据则必须加引号。
二、RegDelete(删除注册表数据)
* 删除一个子主键
语法为:WshShell.RegDelete "子主键名\"
例如,我们想删除子主键“HKEY_CURRENT_USER\MyReg”,可使用如下的语句:
WshShell.RegDelete "HKCU\MyReg\"
* 删除子主键的某个键值
语法为:WshShell.RegDelete "子主键名\键值名"
例如,我们想删除子主键“HKEY_CURRENT_USER\MyReg” 的键值KeyValue,可使用如下的语句:
WshShell.RegDelete "HKCU\MyReg\KeyValue"
类似于RegWrite,有一个“\”号表示的是删除子主键,没有“\”则表示要删除的是子主键下的键值。
除了WshShell对象外,我们还必须了解一下WScirpt 对象。WScirpt对象即代表Scripting Engine,只要启动Engine就会自动产生此对象。WScript对象提供了创建和读取对象的方法。要使用WSH的其他对象(例如WshShell对象),就必须先用WScript对象的有关方法(CreateObject、GetObject)来创建和读取。
创建对象的语法如下:
WScript.CreateObject(strProgID)
其中strProgID就是我们所要创建的对象的标识名。
例如:我们要使用WshShell对象及其属性和方法,首先就要用WScript对象的方法CreateObject来创建一个WshShell对象,语句如下:
Set WSHShell = WScript.CreateObject("WScript.Shell")
举一个例子吧。大家都知道,如果你使用了“开始”菜单中的“运行”,Windows将在列表框里记录下你“作案” 的痕迹。其实这些数据是记录在注册表中HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\Explorer\RunMRU子键下,我们只要把这个子键删除,然后再重新建立,不就可以了吗?
现在我们可以来编写一个脚本了。以VBS为例,我们可以用记事本新建一个文件,然后输入(其中“//”后的文字为注释,不必输入):
//定义对象,要编辑注册表,我们需要使用WSHShell对象及其方法
Dim WSHShell
//对象的方法CreateObject来创建WSHShell对象
Set WSHShell = WScript.CreateObject("WScript.Shell")
//然后我们使用WSHShell对象的方法RegDelete来删除 HKEY_CURRENT_USER\Software\Microsoft\
Windows\CurrentVersion\Explorer\RunMRU子键
WSHShell.RegDelete "HKCU\Software\Microsoft\
Windows\CurrentVersion\Explorer\RunMRU\"
//最后我们恢复该主键,并在该主键下恢复字符串值“MRUList”,设置其数据为空串
WSHShell.RegWrite "HKCU\Software\Microsoft\
Windows\CurrentVersion\Explorer\RunMRU\MRUList",""
程序到此结束,我们把文件另存为CleanMRU.vbs就可以了。现在我们就可以使用Scripting Engine来执行这个程序了。假设我们刚才把这个文件保存在D:\TEMP里,我们就可以使用“开始”菜单的“运行”——Wcript.exe D:\TEMP\CleanMRU.vbs。重新启动,怎么样?“运行”里已经是空空如也了吧!
如果我们这样费尽心思地编了程序,最后还是得靠手工来运行,那还不如每次直接用注册表编辑器来操作呢!其实我们完全可以让它在每次开机时自动加载。这么一说,大家肯定都知道了——我们可以使用注册表编辑器,在“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
CurrentVersion\Run”子主键下建立一个字符串值 “CleanMRU”,设置其数据为"Wcript.exe D:\TEMP\CleanMRU.vbs"。嘿嘿,这样才算大功告成。以后你每次开机,Windows就会自动执行该脚本以清除 “运行”中的历史记录了。
限于篇幅,本文仅仅介绍了WSH有关注册表修改部分的对象的初步使用。我们只要在脚本里加上一些简单的语句,就可以很方便地实现交互性的操作——当然,这就需要大家掌握更多的关于WSH和VBScript的知识。如果感兴趣的话,大家可以到微软网站下载有关WSH和VBScript的帮助文档,URL分别是http://www.microsoft.com/china/ scripting/windowshost/wshdoc.exe和http://www.microsoft.com/china/scripting/vbscript/download/ vbsdoc.exe(都是中文)。另外,在Windows的Samples目录下,有一个WSH文件夹,那里面有不少.vbs和.js例程,大家可以去打开来看看(鼠标右击图标,选择“编辑”),相信一定会有不少收获的。
最后,如果你的机器上已经安装了Windows Scripting Host,而VBS程序仍然无法运行的话,很可能是你自己或其他应用程序修改了.VBS的关联。据笔者所知,几乎每台机器上都装有的“超级解霸”就会修改.VBS文件的关联。没关系的,你只要从“控制面板”—“添加/删除程序”—“Windows安装程序”—“附件”—“详细资料”里先卸掉,然后再重新装上“Windows Scripting Host”就可以了。
如何用pdf编辑器修改pdf文件
以上是关于如何用批处理修改注册表的权限呢?的主要内容,如果未能解决你的问题,请参考以下文章