2013-01-17 3 views
0

레지스트리에서 SQL Server 버전을 확인하기 위해 Installshield Basic MSI 프로젝트에 사용자 지정 작업이 있습니다.Windows 서버 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 서버 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에서 -bit 앱의 레지스트리 키가 다른 위치로 리디렉션됩니다. app/installer가 32 비트 인 경우 64 비트 SQL Server의 레지스트리 항목이 "위치"에있는 동안 해당 레지스트리 조회가 해당 위치 (... \ SOFTWARE \ Wow6432Node \ ...)로 리디렉션 된 것일 수 있습니다. 표준 "위치. 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 옵션에 유의하십시오. 그것 없이는 작동하지 않았습니다.