add windows linkage
This commit is contained in:
parent
b3a94c71eb
commit
ed05e577cd
|
@ -23,8 +23,17 @@ import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hyperic.sigar.SigarLoader;
|
||||||
|
import org.hyperic.sigar.win32.RegistryKey;
|
||||||
|
import org.hyperic.sigar.win32.Win32Exception;
|
||||||
|
|
||||||
public class VMControlLibrary {
|
public class VMControlLibrary {
|
||||||
|
public static final String REGISTRY_ROOT =
|
||||||
|
"SOFTWARE\\VMware, Inc.";
|
||||||
|
|
||||||
public static final String PROP_VMCONTROL_SHLIB =
|
public static final String PROP_VMCONTROL_SHLIB =
|
||||||
"vmcontrol.shlib";
|
"vmcontrol.shlib";
|
||||||
|
|
||||||
|
@ -36,6 +45,9 @@ public class VMControlLibrary {
|
||||||
|
|
||||||
private static final String VMCONTROL = "vmcontrol";
|
private static final String VMCONTROL = "vmcontrol";
|
||||||
|
|
||||||
|
private static final String VMCONTROL_DLL =
|
||||||
|
VMCONTROL + "lib.dll";
|
||||||
|
|
||||||
private static final String VMCONTROL_OBJ =
|
private static final String VMCONTROL_OBJ =
|
||||||
getProperty("vmcontrol.o", "control-only/" + VMCONTROL + ".o");
|
getProperty("vmcontrol.o", "control-only/" + VMCONTROL + ".o");
|
||||||
|
|
||||||
|
@ -90,9 +102,71 @@ public class VMControlLibrary {
|
||||||
link(VMCONTROL + ".so");
|
link(VMCONTROL + ".so");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void linkWin32() {
|
||||||
|
List dlls = new ArrayList();
|
||||||
|
|
||||||
|
RegistryKey root = null;
|
||||||
|
try {
|
||||||
|
root =
|
||||||
|
RegistryKey.LocalMachine.openSubKey(REGISTRY_ROOT);
|
||||||
|
|
||||||
|
String[] keys = root.getSubKeyNames();
|
||||||
|
for (int i=0; i<keys.length; i++) {
|
||||||
|
String name = keys[i];
|
||||||
|
if (!name.startsWith("VMware ")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegistryKey subkey = null;
|
||||||
|
try {
|
||||||
|
subkey = root.openSubKey(name);
|
||||||
|
String path = subkey.getStringValue("InstallPath");
|
||||||
|
if (path == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
path = path.trim();
|
||||||
|
if (path.length() == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
File dll = new File(path + VMCONTROL_DLL);
|
||||||
|
if (dll.exists()) {
|
||||||
|
//prefer VMware Server or VMware GSX Server
|
||||||
|
if (name.endsWith(" Server")) {
|
||||||
|
dlls.add(0, dll.getPath());
|
||||||
|
}
|
||||||
|
//Scripting API will also work
|
||||||
|
else if (name.endsWith(" API")) {
|
||||||
|
dlls.add(dll.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Win32Exception e) {
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
if (subkey != null) {
|
||||||
|
subkey.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Win32Exception e) {
|
||||||
|
} finally {
|
||||||
|
if (root != null) {
|
||||||
|
root.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dlls.size() != 0) {
|
||||||
|
setSharedLibrary((String)dlls.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void link(String name)
|
public static void link(String name)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
|
if (SigarLoader.IS_WIN32) {
|
||||||
|
linkWin32();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
File out = new File(name).getAbsoluteFile();
|
File out = new File(name).getAbsoluteFile();
|
||||||
setSharedLibrary(out.getPath());
|
setSharedLibrary(out.getPath());
|
||||||
|
|
||||||
|
@ -141,6 +215,20 @@ public class VMControlLibrary {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
if (args.length == 0) {
|
||||||
|
link();
|
||||||
|
}
|
||||||
|
else {
|
||||||
link(args[0]);
|
link(args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String shlib = getSharedLibrary();
|
||||||
|
if (shlib == null) {
|
||||||
|
System.out.println("No library found");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println(PROP_VMCONTROL_SHLIB + "=" + shlib +
|
||||||
|
" (loaded=" + isLoaded() + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue