디버깅 VB 스크립트는 목에 통증이있다. 예 : 로그 파일에 쓰는 올드 스쿨 디버깅은 오류 메시지 등을 캡처 할 수 없으므로 가장 좋습니다.
또한 InstallShield에서 레지스트리를 읽고 쓰는 것은 winmgmts를 통해 수행 할 수 있지만 고통 스럽습니다. . 다음은이를 보여주는 예제입니다. 우리 앱이 32 비트 레지스트리 키를 사용하고 32 비트 또는 64 비트 Windows에서 처리되는지 여부를 알 수 없기 때문에 두 위치에서 32 비트 레지스트리 키 (예 : Wow6432Node)를 확인해야했습니다. 여기
우리가 레지스트리를 읽는 데 사용하는 코드입니다 :
Option Explicit
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Dim SoftVersion
SoftVersion = RegReadString("HKLM\SOFTWARE\Co\Software\Version")
If SoftVersion = "" Then
SoftVersion = RegReadString("HKLM\SOFTWARE\Wow6432Node\Co\Software\Version")
End If
Function RegReadString(path)
' RegRead = CreateObject("WScript.Shell").RegRead(path)
Dim objReg, hkroot, pos, posNext, keyPath, valueName, value
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
hkroot = HKEY_CURRENT_USER
If Left(path, 5) = "HKCU\" Then
hkroot = HKEY_CURRENT_USER
path = Mid(path, 6)
ElseIf Left(path, 5) = "HKLM\" Then
hkroot = HKEY_LOCAL_MACHINE
path = Mid(path, 6)
End If
pos = InStr(path, "\")
posNext = InStr(pos + 1, path, "\")
While posNext > 0
pos = posNext
posNext = InStr(pos + 1, path, "\")
Wend
keyPath = Left(path, pos - 1)
valueName = Mid(path, pos + 1)
objReg.GetStringValue hkroot, keyPath, valueName, value
If IsNull(value) Then
RegReadString = ""
Else
RegReadString = value
End If
End Function
Sub RegWriteString(path, value)
Dim objReg, hkroot, pos, posNext, keyPath, valueName
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
hkroot = HKEY_CURRENT_USER
If Left(path, 5) = "HKCU\" Then
hkroot = HKEY_CURRENT_USER
path = Mid(path, 6)
ElseIf Left(path, 5) = "HKLM\" Then
hkroot = HKEY_LOCAL_MACHINE
path = Mid(path, 6)
End If
pos = InStr(path, "\")
posNext = InStr(pos + 1, path, "\")
While posNext > 0
pos = posNext
posNext = InStr(pos + 1, path, "\")
Wend
keyPath = Left(path, pos - 1)
valueName = Mid(path, pos + 1)
objReg.SetStringValue hkroot, keyPath, valueName, value
End Sub
```
저는 installscript에 익숙하지 않아 답변으로 추가하지는 않지만 일반적으로 [명령 줄에서 vbs를 호출 할 수 있습니다] (https://technet.microsoft.com/en -us/library/bb490816.aspx? f = 255 & MSPPError = -2147217396)를'cscript.exe/path/to/your.vbs'와 함께 사용하면 스크린 프린트의 두 번째 필드에서 작동합니다. – JNevill
@JNevill - 귀하의 아이디어에 감사드립니다. IS가 가지고있는 것처럼 vbs 스크립트를 실행하기에 충분히 똑똑하다는 것이 밝혀졌습니다. IS UI의 특이성으로 인해 "조건"을 올바르게 지정하지 않았습니다. 나는 여전히 내가 원하는 행동을하기 위해 다른 농구를 뛰어 넘어야하지만, 적어도 나는 올바른 길을 가고있다. –
좋은 소식입니다. 원하는 경우 솔루션을 여기에 답변으로 추가하고 그대로 표시 할 수 있습니다.이 방법은 미래에 다른 사람이 동일한 문제가 붙어 있다면, 거기에 도움이 될 것입니다. – JNevill