1

アンインストール内のサブキーを繰り返し処理して、HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall の Java バージョンを一致させようとしています。正規表現を Java 7 Update 40 に一致させようとしていますが、正規表現はすべての DisplayName エントリと一致しています。以下はコードです:

 On Error Resume Next 
 Const HKEY_LOCAL_MACHINE = &H80000002 
 Dim oReg 
 Dim objShell

 Set objShell = WScript.CreateObject("WScript.Shell") 
 Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\default:StdRegProv") 
 Dim sPath, aSub, sKey 
 Set objRegEx = New RegExp 
 objRegEx.Pattern = "\w{4}\s\d{1}\s\w{6}\s\d+" 
 objRedEx.IgnoreCase = True 
 objRegEx.Global = False


 sPath = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 
 oReg.EnumKey HKEY_LOCAL_MACHINE, sPath, aSub 
 For Each sKey In aSub 
 disName = "HKLM" & "\" & sPath & "\" & sKey & "\DisplayName" 
 unString = "HKLM" & "\" & sPath & "\" & sKey & "\UninstallString" 
 reDisName = objShell.RegRead(disName) 
 reUnString = objShell.RegRead(unString) 
 'Wscript.echo(reDisName)

 If objRexEx.Test( reDisName ) Then 
      Wscript.echo "Match" 
 End If

 'Wscript.echo ObjShell.RegRead(disName) 
 'Wscript.echo ObjShell.RegRead(unString) 
 Next

フォーマットがずれている場合は申し訳ありませんが、各コード行の前に ctrl-k を置きます。ここに投稿するのは初めてなので、お手柔らかに…

4

2 に答える 2

1

すべてのスクリプトはOption ExplicitDimすべての変数で開始する必要があります。そうすれば、タイプミスを見つけるのに sln のイーグルアイは必要ありません。

Option Explicit
Dim objRegEx : Set objRegEx = New RegExp
objRegEx.Pattern = "\w{4}\s\d{1}\s\w{6}\s\d+"
objRedEx.IgnoreCase = True

出力:

cscript 19188400.vbs
...\19188400.vbs(4, 1) Microsoft VBScript runtime error: Variable is undefined: 'objRedEx'

グローバルOn Error Resume Next(最も危険な不正行為) を使用することに固執する場合は、スクリプトが完全にデバッグされるまでグローバルを無効にする必要があります。少しでも問題があることがわかっているスクリプトに OERN を保持することは、災難を招きます。グローバル OERN を含むコードについて助けを求めても無駄です。したがって、OERN なしでプログラムを実行し、その誤動作の原因が明らかでないかどうかを確認してください。

診断出力は、できるだけ具体的にする必要があります。ステートメントWScript.Echo "Match"が実行されたことを示しています。はWScript.Echo "Match", disname少し良いでしょう。.Execute を使用して、Match の詳細を確認すると、より明らかになる可能性があります。

.Pattern はより具体的なものにする必要があります。Java の更新を探す場合、文字列の先頭にリテラルの「java」を固定し、「\w{6}」ではなく「アップグレード」を要求すると、誤検知を回避できる場合があります。OTOH、表示名が似ていない

Java 7 Update 19

でも好き

Java(TM) 6 Update 19

そして、Java の次の所有者が表示名に何を入れるかは誰にもわかりません。

于 2013-10-04T20:23:49.020 に答える