0

Installshield Basic MSI プロジェクトに、レジストリから SQL Server のバージョンを調べるカスタム アクションがあります。

RegKey2012 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _
             "Microsoft SQL Server\MSSQL11.MSSQLSERVER\"
If RegKeyExists(RegKey2012) Then 
  WScript.StdOut.Write("2012") 
Else 
  WScript.StdOut.Write("2008R2") 
End If 

Function RegKeyExists(Key) 
  Dim oShell, entry 
  On Error Resume Next 
  Set oShell = CreateObject("WScript.Shell") 
  entry = oShell.RegRead(Key) 
  If Err.Number <> 0 Then 
    Err.Clear 
    RegKeyExists = False 
  Else 
    Err.Clear 
    RegKeyExists = True 
  End If 
End Function

インストーラーは、Windows 7 マシンで正常に動作します。上記のスクリプトは、Windows Server 2012 マシン上で単独で正常に動作します。ただし、Windows Server 2012 で (ADMIN として) インストーラーを実行すると、期待どおりに動作せず、エラーの説明は - レジストリ キーが見つかりません。

何か案は。

4

1 に答える 1

1
strkey="HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\Setup" & Chr(34) &  " /v Version /reg:64"

Set objShell = CreateObject("WScript.Shell")
Set objScriptExec = objShell.Exec("REG QUERY " & Chr(34) & strkey )

strText = objScriptExec.StdOut.ReadAll()
if (strText <> "") then
WScript.echo "2012"
else
WScript.echo "2008R2"
end if

line1 の /reg:64 オプションに注意してください。それがなければ機能しませんでした。

于 2013-01-19T09:56:04.903 に答える