Created
August 21, 2012 22:31
-
-
Save rpavlik/3420023 to your computer and use it in GitHub Desktop.
Finding java once and for all - no batch file nonsense
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
getJRE = function(ver, wantJDK) { | |
var wshShell = new ActiveXObject("WScript.Shell"); | |
var key = "HKLM\\SOFTWARE\\JavaSoft\\" + | |
(wantJDK ? "Java Development Kit\\" : "Java Runtime Environment\\") + | |
ver + | |
"\\JavaHome"; | |
//WScript.Echo(key); | |
try { | |
return wshShell.RegRead(key) | |
} catch(e) { | |
return ""; | |
} | |
} | |
getCurrentVersion = function() { | |
var wshShell = new ActiveXObject("WScript.Shell"); | |
try { | |
return wshShell.RegRead("HKLM\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\CurrentVersion"); | |
} catch(e) { | |
return ""; | |
} | |
} | |
//WScript.Echo(getCurrentVersion()); | |
versions = [ | |
getCurrentVersion(), | |
"1.7", | |
"1.6", | |
"1.5" | |
]; | |
buildCandidates = function(jdkRequired) { | |
var ret = []; | |
for (ver in versions) { | |
var jdk = getJRE(versions[ver], true); | |
if (jdk != "") { | |
ret.push(jdk); | |
} | |
if (!jdkRequired) { | |
var jre = getJRE(versions[ver], false); | |
if (jre != "") { | |
ret.push(jre); | |
} | |
} | |
} | |
return ret; | |
} | |
makeFileChecker = function(path) { | |
return function(root) { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
if (fso.FileExists(fso.BuildPath(root, path))) { | |
return true; | |
} else { | |
return false; | |
} | |
} | |
} | |
if (!Array.prototype.filter) | |
{ | |
Array.prototype.filter = function(fun /*, thisp*/) | |
{ | |
var len = this.length; | |
if (typeof fun != "function") | |
throw new TypeError(); | |
var res = new Array(); | |
var thisp = arguments[1]; | |
for (var i = 0; i < len; i++) | |
{ | |
if (i in this) | |
{ | |
var val = this[i]; // in case fun mutates this | |
if (fun.call(thisp, val, i, this)) | |
res.push(val); | |
} | |
} | |
return res; | |
}; | |
} | |
if (!Array.prototype.map) | |
{ | |
Array.prototype.map = function(fun /*, thisp*/) | |
{ | |
var len = this.length; | |
if (typeof fun != "function") | |
throw new TypeError(); | |
var res = new Array(len); | |
var thisp = arguments[1]; | |
for (var i = 0; i < len; i++) | |
{ | |
if (i in this) | |
res[i] = fun.call(thisp, this[i], i, this); | |
} | |
return res; | |
}; | |
} | |
hasJavaExe = makeFileChecker("bin\\java.exe"); | |
hasClientJVMDLL = makeFileChecker("bin\\client\\jvm.dll"); | |
hasServerJVMDLL = makeFileChecker("bin\\server\\jvm.dll"); | |
isSuitable = function(root) { | |
return hasJavaExe(root) && ( hasClientJVMDLL(root) || hasServerJVMDLL(root) ); | |
} | |
justJavaExeDir = function(root) { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
return fso.BuildPath(root, "bin"); | |
} | |
jvmDLLAndJavaExeDir = function(root) { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
return justJavaExeDir(root) + ";" + | |
(hasClientJVMDLL(root) ? | |
fso.BuildPath(root, "bin\\client") : | |
fso.BuildPath(root, "bin\\server") | |
); | |
} | |
//WScript.Echo("Starting"); | |
locs = buildCandidates(false); | |
JAVA_PATH=locs.filter(hasJavaExe).map(justJavaExeDir).join(";"); | |
JAVA_JNI_PATH=locs.filter(isSuitable).map(jvmDLLAndJavaExeDir).join(";"); | |
//WScript.Echo("done"); | |
launchCmdPrompt = function(cmd) { | |
var wshShell = new ActiveXObject("WScript.Shell"); | |
wshShell.Run("%COMSPEC% /k " + cmd); | |
} | |
chdir = function(abspath) { | |
var wshShell = new ActiveXObject("WScript.Shell"); | |
wshShell.CurrentDirectory = abspath; | |
} | |
chdirIfPossible = function(dir) { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
if (fso.FolderExists(dir)) { | |
chdir(fso.GetAbsolutePathName(dir)); | |
return true; | |
} | |
return false; | |
} | |
var wshShell = new ActiveXObject("WScript.Shell"); | |
var wshProcEnv = wshShell.Environment("PROCESS"); | |
wshProcEnv("PATH") = JAVA_JNI_PATH + wshProcEnv("PATH"); | |
if (WScript.Arguments.length == 1) { | |
var didChdir = chdirIfPossible(WScript.Arguments.Item(0)); | |
if (didChdir) { | |
launchCmdPrompt("echo In Java/JNI command prompt in your desired directory."); | |
WScript.Quit(); | |
} else { | |
// todo run program here. | |
} | |
} | |
launchCmdPrompt("echo In Java/JNI command prompt."); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment