mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-14 19:52:21 -05:00
f69382ccc7
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@2100 3d1905a2-6b24-0410-a738-b14d5a86fcbd
116 lines
3.2 KiB
C++
116 lines
3.2 KiB
C++
/*
|
|
JSmooth: a VM wrapper toolkit for Windows
|
|
Copyright (C) 2003-2007 Rodrigo Reyes <reyes@charabia.net>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with this library; if not, write to the Free
|
|
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
|
|
|
#include "JVMRegistryLookup.h"
|
|
|
|
struct jvmsorter_dec : public binary_function<const SunJVMLauncher&, const SunJVMLauncher&, bool>
|
|
{
|
|
bool operator()(const SunJVMLauncher& s1, const SunJVMLauncher& s2)
|
|
{
|
|
return s2 < s1;
|
|
}
|
|
};
|
|
|
|
vector<SunJVMLauncher> JVMRegistryLookup::lookupJVM()
|
|
{
|
|
vector<SunJVMLauncher> res = JVMRegistryLookup::lookup(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment");
|
|
|
|
vector<SunJVMLauncher> res2 = JVMRegistryLookup::lookup(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Development Kit");
|
|
|
|
for (vector<SunJVMLauncher>::iterator i = res2.begin(); i != res2.end(); i++)
|
|
{
|
|
res.insert(res.end(), *i);
|
|
}
|
|
|
|
sort(res.begin(), res.end(), jvmsorter_dec() );
|
|
|
|
return res;
|
|
}
|
|
|
|
vector<SunJVMLauncher> JVMRegistryLookup::lookup(HKEY key, const string& path)
|
|
{
|
|
vector<SunJVMLauncher> result;
|
|
|
|
HKEY hKey;
|
|
LONG error = ERROR_SUCCESS;
|
|
LONG val = RegOpenKeyEx(key, path.c_str(), 0, KEY_READ, &hKey);
|
|
|
|
unsigned long buffersize = 1024;
|
|
char buffer[1024];
|
|
|
|
for (int i=0; RegEnumKey(hKey, i, buffer, buffersize) == ERROR_SUCCESS; i++)
|
|
{
|
|
int v = i;
|
|
HKEY version;
|
|
int foundver = RegOpenKeyEx(hKey, buffer, 0, KEY_READ, &version);
|
|
if (foundver == ERROR_SUCCESS)
|
|
{
|
|
std::string versionname(buffer);
|
|
HKEY runtimelib;
|
|
unsigned long datatype;
|
|
std::string runtimelibstr = "";
|
|
std::string javahomestr = "";
|
|
|
|
unsigned char *b = (unsigned char*)buffer;
|
|
buffersize = 1024;
|
|
int foundlib = RegQueryValueEx(version, TEXT("RuntimeLib"),
|
|
NULL,
|
|
&datatype,
|
|
b,
|
|
&buffersize);
|
|
|
|
if (foundlib == ERROR_SUCCESS)
|
|
{
|
|
runtimelibstr = buffer;
|
|
}
|
|
|
|
b = (unsigned char*)buffer;
|
|
buffersize = 1024;
|
|
int foundhome = RegQueryValueEx(version, TEXT("JavaHome"),
|
|
NULL,
|
|
&datatype,
|
|
b,
|
|
&buffersize);
|
|
if (foundhome == ERROR_SUCCESS)
|
|
{
|
|
javahomestr = buffer;
|
|
}
|
|
|
|
if ((runtimelibstr.length()>0) || (javahomestr.length()>0))
|
|
{
|
|
SunJVMLauncher vm;
|
|
vm.RuntimeLibPath = runtimelibstr;
|
|
vm.JavaHome = javahomestr;
|
|
vm.VmVersion = Version(versionname);
|
|
result.push_back(vm);
|
|
|
|
char buffer[244];
|
|
sprintf(buffer, "V(%d)(%d)(%d)", vm.VmVersion.getMajor(), vm.VmVersion.getMinor(), vm.VmVersion.getSubMinor());
|
|
DEBUG(std::string("JVM Lookup: found VM (") + buffer + ") in registry.");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|