diff options
author | glx <glx@openttd.org> | 2008-03-15 22:43:28 +0000 |
---|---|---|
committer | glx <glx@openttd.org> | 2008-03-15 22:43:28 +0000 |
commit | e93f03cf84cb0a0a703641a8378892a380f3a429 (patch) | |
tree | 37f1a087f2a93f7dec6517020941f1a54ed38fbe /projects | |
parent | 38be279d3a416ab991a83221464c10659b7feff7 (diff) | |
download | openttd-e93f03cf84cb0a0a703641a8378892a380f3a429.tar.xz |
(svn r12375) -Fix [FS#1847]: revision detection failed to detect 64bit TortoiseSVN when ran from a 32bit MSVC on win64 system (Jafinto)
Diffstat (limited to 'projects')
-rwxr-xr-x | projects/determineversion.vbs | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index e478b3cbc..3ac5852f5 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -53,6 +53,43 @@ Sub UpdateFiles(version) UpdateFile revision, version, cur_date, "../src/ottdres.rc" End Sub +Function ReadRegistryKey(shive, subkey, valuename, architecture) + Dim hiveKey, objCtx, objLocator, objServices, objReg, Inparams, Outparams + + ' First, get the Registry Provider for the requested architecture + Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet") + objCtx.Add "__ProviderArchitecture", architecture ' Must be 64 of 32 + Set objLocator = CreateObject("Wbemscripting.SWbemLocator") + Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx) + Set objReg = objServices.Get("StdRegProv") + + ' Check the hive and give it the right value + Select Case shive + Case "HKCR", "HKEY_CLASSES_ROOT" + hiveKey = &h80000000 + Case "HKCU", "HKEY_CURRENT_USER" + hiveKey = &H80000001 + Case "HKLM", "HKEY_LOCAL_MACHINE" + hiveKey = &h80000002 + Case "HKU", "HKEY_USERS" + hiveKey = &h80000003 + Case "HKCC", "HKEY_CURRENT_CONFIG" + hiveKey = &h80000005 + Case "HKDD", "HKEY_DYN_DATA" ' Only valid for Windows 95/98 + hiveKey = &h80000006 + Case Else + MsgBox "Hive not valid (ReadRegistryKey)" + End Select + + Set Inparams = objReg.Methods_("GetStringValue").Inparameters + Inparams.Hdefkey = hiveKey + Inparams.Ssubkeyname = subkey + Inparams.Svaluename = valuename + Set Outparams = objReg.ExecMethod_("GetStringValue", Inparams,,objCtx) + + ReadRegistryKey = Outparams.SValue +End Function + Function DetermineSVNVersion() Dim WshShell, version, url, oExec, line Set WshShell = CreateObject("WScript.Shell") @@ -61,27 +98,35 @@ Function DetermineSVNVersion() ' Try TortoiseSVN ' Get the directory where TortoiseSVN (should) reside(s) Dim sTortoise - sTortoise = WshShell.RegRead("HKLM\SOFTWARE\TortoiseSVN\Directory") - - Dim file - ' Write some "magic" to a temporary file so we can acquire the svn revision/state - Set file = FSO.CreateTextFile("tsvn_tmp", -1, 0) - file.WriteLine "r$WCREV$$WCMODS?M:$" - file.WriteLine "$WCURL$" - file.Close - Set oExec = WshShell.Exec(sTortoise & "\bin\SubWCRev.exe ../src tsvn_tmp tsvn_tmp") - ' Wait till the application is finished ... - Do - OExec.StdOut.ReadLine() - Loop While Not OExec.StdOut.atEndOfStream - - Set file = FSO.OpenTextFile("tsvn_tmp", 1, 0, 0) - version = file.ReadLine - url = file.ReadLine - file.Close + ' First, try with 32-bit architecture + sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 32) + If sTortoise = Nothing Then + ' No 32-bit version of TortoiseSVN installed, try 64-bit version (doesn't hurt on 32-bit machines, it returns nothing or is ignored) + sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 64) + End If - Set file = FSO.GetFile("tsvn_tmp") - file.Delete + ' If TortoiseSVN is installed, try to get the revision number + If sTortoise <> Nothing Then + Dim file + ' Write some "magic" to a temporary file so we can acquire the svn revision/state + Set file = FSO.CreateTextFile("tsvn_tmp", -1, 0) + file.WriteLine "r$WCREV$$WCMODS?M:$" + file.WriteLine "$WCURL$" + file.Close + Set oExec = WshShell.Exec(sTortoise & "\bin\SubWCRev.exe ../src tsvn_tmp tsvn_tmp") + ' Wait till the application is finished ... + Do + OExec.StdOut.ReadLine() + Loop While Not OExec.StdOut.atEndOfStream + + Set file = FSO.OpenTextFile("tsvn_tmp", 1, 0, 0) + version = file.ReadLine + url = file.ReadLine + file.Close + + Set file = FSO.GetFile("tsvn_tmp") + file.Delete + End If ' Looks like there is no TortoiseSVN installed either. Then we don't know it. If InStr(version, "$") Then |