StdRegProv WMI 클래스와 GetExpandedStringValue 및 GetStringValue 메서드를 사용하는 VBScript에서 다음 코드에 문제가 있습니다.
' Name the standard reg provider
sRegProv = "\\.\root\cimv2:StdRegProv"
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!" & _
sRegProv)
' OS is a 64-bit computer, and we need to check all paths
' Do the 32-bit stuff, as most things these days are 32-bit
sKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
' Fill arrKeys with every value under sKeyPath
oReg.EnumKey HKEY_LOCAL_MACHINE, sKeyPath, arrKeys
' step through each key until we find the one we want
For Each subKey in arrKeys
' Set the full key path to the next key
sFullKeyPath = sKeyPath & subKey
' Wscript.echo "Checking key: " & subKey
' Set the sDisplayName variable to the value in the key
oReg.GetStringValue HKEY_LOCAL_MACHINE, sFullKeyPath, "DisplayName", sDisplayName
Wscript.Echo "Found " & sDisplayName & " in key " & subKey
If sDisplayName = sAppName Then
Wscript.Echo "Found value: " & sDisplayName
oReg.GetExpandedStringValue HKEY_LOCAL_MACHINE, sFullKeyPath, "UninstallString", sUninstallString
GetRegUninstallString = sUninstallString
' Exit the function; we've found what we're looking for
Exit Function
End If
Next
내 문제는 GetStringValue 호출이 값을 전혀 반환하지 않고 GetExpandedStringValue도 마찬가지라는 것입니다. 나는 이름을 확인하는 논리와 다른 여러 가지없이 이것을 시도했습니다. 이것은 모두 더 큰 기능의 일부입니다.
이 코드에서 볼 수없는 것은 내가 상수를 선언 한 곳과 함수 자체입니다.
const HEKY_LOCAL_MACHINE = &H80000002
함수에는 해당 값이 설정되는 sAppName의 입력 매개 변수가 있습니다. 설정시 적절한 인용 규칙을 사용하고 있습니다 (예 : Microsoft Office ProfessionalPlus 2013은 "Microsoft Office ProfessionalPlus 2013"입니다).
도와주세요. 제거 프로그램이 회사 전체에서 일관되지 않는 문제가 있으며, 차이점 때문에 문제를 한 번에 해결할 수 있도록 프로그래밍 방식으로 문제에 접근하고 싶습니다. Microsoft SCCM 2007을 사용하여이 스크립트를 배포하고 싶습니다. 앱 이름을 확인한 다음 제거 값을 가져 와서 문제를 해결할 수 있다면 멋지게 작동합니다.
내 검색 결과의 대부분은 GetStringValue 호출에서 out 매개 변수를 제공하지 않는 사람들과 관련이 있습니다. 다음 MSDN 문서를 참조했습니다. StdRegProv (WMI 클래스), GetStringValue
미리 답변 해 주셔서 감사합니다. 나는 그것이 어리석은 일이라고 확신합니다. 덧붙여서 OS는 Windows 8.1 64 비트입니다.
sFullKeyPath 쿼리의 결과가 무엇인지 확인하기 위해 여기에 코드에 한 줄을 추가했는데 존재하지 않는 키에 대한 오류 인 2로 밝혀졌습니다. 그래서 다음을 변경하면 내 문제가 해결되었습니다.
sFullKeyPath = sKeyPath & "\" & subKey
일단 변경되면 나머지 스크립트가 작동했습니다. 그 후 완전히 실패한 유일한 항목은 "DisplayName"속성이없는 레지스트리 키였습니다.
사람들이 결과를 읽고 볼 수 있도록 답변으로 게시하고 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다