2013-01-17 126 views
0

我在Installshield Basic MSI項目中有一個自定義操作,以從註冊表中找出SQL Server的版本。在Windows Server 2012中安裝程序註冊表訪問

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)時,它無法按預期工作,並且錯誤說明是 - 它無法找到註冊表項。

任何想法。

+1

你是否可能遇到32位和64位註冊表重定向問題? – DaveE

+0

不知道..我馬2/10在Installshield中...你能請詳細說明...在32位和64位計算機的註冊表鍵是相同的 - HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER – Subhasis

+1

32 64位Windows上的位應用程序將其註冊表項重定向到其他位置。如果你的應用/安裝程序是32位的,它可能是它的註冊表查找被重定向到該位置(... \ SOFTWARE \ Wow6432Node \ ...),而你的64位SQL Server註冊表項是在「標準「的位置。在IS幫助中查找REGDB_OPTION_WOW64_64KEY或WOW64FSREDIRECTION。 – DaveE

回答

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選項。沒有它,它不工作。

相關問題