2017-09-18 12 views
0

VB ScriptスクリプトファイルをInstallScriptプロジェクトの前提条件として使用します。私はVBスクリプトを使用する必要があります。なぜなら、IS前提条件エディタの通常の条件では使用できないいくつかの異なる条件をチェックする必要があるからです(つまり、オペレーティングシステムの条件はOR、その他の条件はANDです)。InstallScriptプロジェクトでVBScriptを呼び出す方法

リンクhereがありますが、InstallScriptプロジェクトには適用されません。

「起動したいアプリケーションを指定する」コンボで単に名前を付けてみましたが、動作していないようです。 (.vbsスクリプトは、基本的な機能をテストできるようにモーダルダイアログを表示するだけです。)

これを行うことはできますか?

enter image description here

+0

私はinstallscriptに慣れていないので、これを答えとして追加していませんが、一般的には[コマンドラインからvbsを呼び出すことができます](https://technet.microsoft.com/en) 'cscript.exe/path/to/your.vbs'を使って-us/library/bb490816.aspx?f = 255とMSPPError = -2147217396)を入力してください。 – JNevill

+0

@JNevill - あなたの考えに感謝します。私はそれを持っているので、ISはvbsスクリプトを起動するのに十分なほどスマートです。 IS UIの特異性のために、私は「条件」を正しく指定していませんでした。私はまだ私が望む行動を得るためにいくつかのフープを飛び越えなければならないが、少なくとも私は正しい道にいる。 –

+0

それは素晴らしいニュースです!あなたが望むのであれば、あなたの解決策を答えとして追加して、そのようにマークすることができます。将来、他の誰かが同じ問題に悩まされている場合は、このように助けが必要です。 – JNevill

答えて

0

それは私のVBSスクリプトは、すべて一緒に働いていたことが判明したが、私はの右側に見ていませんでした決定を下すために必要なキーのレジストリ。 64ビットのボックスでは、32ビットプロセスがWow6432Nodeサブキーを見て(魔法のようにリダイレクトされて見える)。私は、キー

HKLM\Software\BoGusman

を探しているのであれば、プロセスは、ターゲット・キーは、64ビットのレジストリに存在していたが、WOW6432NODEに存在しませんでした

HKLM\Software\Wow6432Node\BoGusman

を見て、実際にです。両方の場所でキーを作成することで問題は解決しました。

@JNevillと@Steven Quanのおかげで、正しい軌道に乗ることができました。

0

のInstallShieldでのデバッグ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 

`` `

関連する問題