2017-09-18 13 views
0

VB Script 스크립트 파일을 InstallScript 프로젝트 선행 조건의 대상으로 사용하고 싶습니다. IS 필수 조건 편집기에서 정규 조건을 사용하여 수행 할 수없는 몇 가지 다른 조건을 확인해야하므로 VB Script를 사용해야합니다 (예 : 운영 체제 조건은 OR, 다른 조건은 AND입니다).InstallScript 프로젝트에서 VBScript를 호출하는 방법

here 링크가 있지만 InstallScript 프로젝트에는 적용되지 않습니다.

"시작하려는 응용 프로그램 지정"콤보에도 간단히 이름을 지정했지만 작동하지 않는 것 같습니다. (.vbs 스크립트는 모달 대화 상자를 표시하여 기본 기능을 테스트 할 수 있습니다.)

이 작업을 수행 할 수 있습니까? 하면 Installshield에서

enter image description here

+0

저는 installscript에 익숙하지 않아 답변으로 추가하지는 않지만 일반적으로 [명령 줄에서 vbs를 호출 할 수 있습니다] (https://technet.microsoft.com/en -us/library/bb490816.aspx? f = 255 & MSPPError = -2147217396)를'cscript.exe/path/to/your.vbs'와 함께 사용하면 스크린 프린트의 두 번째 필드에서 작동합니다. – JNevill

+0

@JNevill - 귀하의 아이디어에 감사드립니다. IS가 가지고있는 것처럼 vbs 스크립트를 실행하기에 충분히 똑똑하다는 것이 밝혀졌습니다. IS UI의 특이성으로 인해 "조건"을 올바르게 지정하지 않았습니다. 나는 여전히 내가 원하는 행동을하기 위해 다른 농구를 뛰어 넘어야하지만, 적어도 나는 올바른 길을 가고있다. –

+0

좋은 소식입니다. 원하는 경우 솔루션을 여기에 답변으로 추가하고 그대로 표시 할 수 있습니다.이 방법은 미래에 다른 사람이 동일한 문제가 붙어 있다면, 거기에 도움이 될 것입니다. – JNevill

답변

0

그것은 밝혀 내 VBS 스크립트가 모두 함께 일하고 있음을,하지만 난의 오른쪽 부분에보고되지 않았습니다 내가 결정을 내릴 때 필요한 열쇠를위한 레지스트리. 64 비트 박스에서 32 비트 프로세스는 Wow6432Node 서브 키를보고 (마술처럼 방향을 바꾸어보고) 서브 키를 찾습니다. 나는

HKLM\Software\Wow6432Node\BoGusman

대상 키는 64 비트 레지스트리에 존재하지만 Wow6432Node에 존재하지 않았던에서 키

HKLM\Software\BoGusman

프로세스가 실제로이 찾고 찾고 있어요 그래서 경우 . 두 위치 모두에서 키를 생성하면 문제가 해결됩니다.

@JNevill과 @Steven Quan에게 감사드립니다.

0

디버깅 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 

```