Skip to content

Instantly share code, notes, and snippets.

@rpavlik
Created August 21, 2012 22:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rpavlik/3420023 to your computer and use it in GitHub Desktop.
Save rpavlik/3420023 to your computer and use it in GitHub Desktop.
Finding java once and for all - no batch file nonsense
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