无法从批处理文件或VBS中删除注册表项

时间:2014-06-27 18:44:39

标签: windows batch-file vbscript cmd

我有一个批处理文件,它从计算机中删除注册表项,批处理文件包含以下行。

REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Test\Installation\Test-x64-9.2 /f > remove.log 2>&1
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Test\Service\Test-x64-9.2 /f > remove.log 2>&1

安装程序调用此批处理文件(我猜是InstallAnywhere)。当安装程序运行并执行此批处理文件时,remove.log指出:

ERROR: The system was unable to find the specified registry key or value.  

当我手动运行此批处理文件时,它可以正常工作。我认为批处理文件存在一些问题,所以我创建了一个VBScript来删除Reg条目。同样的事情。
当我手动运行vbs时,它删除了reg键,但是当安装程序调用相同的vbs时,它不会删除reg条目。

如果权限是问题,那么我想我会收到permission denied错误。没有。它只是说ERROR: The system was unable to find the specified registry key or value.

有谁知道这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

试试这个Vbscript

Option Explicit
Dim WshShell,MyKey1,MyKey2,MyKeys,i
MyKey1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Test\Installation\Test-x64-9.2"
MyKey2 = "HKEY_LOCAL_MACHINE\SOFTWARE\Test\Service\Test-x64-9.2"
Set WshShell = CreateObject("WScript.Shell")
MyKeys = Array(MyKey1,MyKey2)
For i = LBound(MyKeys) To UBound(MyKeys)
    If RegExists(MyKeys(i)) = True Then
        WshShell.RegDelete(MyKeys(i))
        Msgbox "The key " & DblQuote(MyKeys(i)) & " is deleted ! ",VbInformation,DblQuote(MyKeys(i))
    Else
        Msgbox "ERROR " & VbTab & Err.Description & VbCrLF & "The key " & DblQuote(MyKeys(i)) & " NOT FOUND ! ",VbCritical,DblQuote(MyKeys(i))
    End if
Next
'************************************************************************
Function RegExists(value)
    On Error Resume Next
    Dim WS
    Set WS = CreateObject("WScript.Shell")
    val = WS.RegRead(value)
    If (Err.number = -2147024893) or (Err.number = -2147024894) Then
        RegExists = False
    Else
        RegExists = True
    End If
End Function
'************************************************************************
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'************************************************************************

答案 1 :(得分:0)

这是安装程序的常见问题 - 本页右侧有类似的问题。使用/ reg:64参数。 http://support.microsoft.com/kb/948698/en-au