2016-11-30 4 views
4

JAVA_HOMEとCATALINA_HOME環境変数の値をJavaで取得する必要があります。私はJAR(WARではない)を実行していて、System.getProperties()には"java.home"しか見つかりませんでした。JavaでJAVA_HOMEおよびCATALINA_HOME環境変数を取得する方法は?

私はいくつかの他の質問をここで読んで、試しましたが、動作させることができませんでした。私は例外があり、結果としてnullという値を得ました。

何年も前にJNAを使って何かをやったことを覚えていますが、それはWindowsの16ビット時代です。最新のJNA jar私は2011年からintelliJで動作していますが、ビルド時にいくつかのクラスが見つからないというエラーが出ます。

私はJNAの指示を調査していきます。援助やアイデアをお寄せいただければ幸いです。私は右が足りないだけだと思う​​。Maven依存。セキュリティマネージャが許す場合

System.getenv("JAVA_HOME"); 
System.getenv("CATALINA_HOME"); 

// C:\devtools\java-external-jars\jna-4.2.2\jna-platform-4.2.2.jar 

import com.sun.jna.platform.win32.Advapi32Util; 
import com.sun.jna.platform.win32.WinReg; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.StringWriter; 
import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.prefs.Preferences; 

public class WinRegistryHelper { 

    public static final String SYSTEM_ENVIRONMENT_KEY_PATH = "SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment"; 

    public static final int HKEY_CURRENT_USER = 0x80000001; 
    public static final int HKEY_LOCAL_MACHINE = 0x80000002; 
    public static final int REG_SUCCESS = 0; 
    public static final int REG_NOTFOUND = 2; 
    public static final int REG_ACCESSDENIED = 5; 

    private static final int KEY_ALL_ACCESS = 0xf003f; 
    private static final int KEY_READ = 0x20019; 
    private static final Preferences userRoot = Preferences.userRoot(); 
    private static final Preferences systemRoot = Preferences.systemRoot(); 
    private static final Class<? extends Preferences> userClass = userRoot.getClass(); 
    private static final Method regOpenKey; 
    private static final Method regCloseKey; 
    private static final Method regQueryValueEx; 
    private static final Method regEnumValue; 
    private static final Method regQueryInfoKey; 
    private static final Method regEnumKeyEx; 
    private static final Method regCreateKeyEx; 
    private static final Method regSetValueEx; 
    private static final Method regDeleteKey; 
    private static final Method regDeleteValue; 

    private WinRegistryHelper() { } 


    /** 
    * 
    * {@code String stringValue = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName");} 
    */ 
    public static String registryGetStringValue(WinReg.HKEY root, String keyPath, String keyName) { 
     // Read a string 
     String stringValue = Advapi32Util.registryGetStringValue(root, keyPath, keyName); 
     System.out.printf(keyName + " value is: %s\n", stringValue); 
     return stringValue; 
    } 

    /** 
    * 
    * {@code int timeout = Advapi32Util.registryGetIntValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", "ShutdownWarningDialogTimeout");} 
    */ 
    public static int registryGetIntValue(WinReg.HKEY root, String keyPath, String keyName) { 
     // Read an int (& 0xFFFFFFFFL for large unsigned int) 
     int intValue = Advapi32Util.registryGetIntValue(root, keyPath, keyName); 
     System.out.printf(keyName + " value is: %d (%d as unsigned long)\n", intValue, intValue & 0xFFFFFFFFL); 
     return intValue; 
    } 

    /** 
    * 
    * {@code int timeout = Advapi32Util.registryGetLongValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", "ShutdownWarningDialogTimeout");} 
    */ 
    public static long registryGetLongValue(WinReg.HKEY root, String keyPath, String keyName) { 
     // Read an int (& 0xFFFFFFFFL for large unsigned int) 
     long longValue = Advapi32Util.registryGetLongValue(root, keyPath, keyName); 
     System.out.printf(keyName + " value is: %d (%d as unsigned long)\n", longValue, longValue & 0xFFFFFFFFL); 
     return longValue; 
    } 

    /** 
    * 
    * {@code Advapi32Util.registryCreateKeyPath(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow");} 
    */ 
    public static void registryCreateKeyPath(WinReg.HKEY root, String keyPath) { 
     // Create a key and write a string 
     Advapi32Util.registryCreateKey(root, keyPath); 
    } 

    /** 
    * {@code Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow", "url", "http://stackoverflow.com/a/6287763/277307");} 
    */ 
    public static void registrySetStringValue(WinReg.HKEY root, String keyPath, String keyName, String keyValue) { 
     Advapi32Util.registrySetStringValue(root, keyPath, keyName, keyValue); 
    } 

    public static void registrySetIntValue(WinReg.HKEY root, String keyPath, String keyName, int keyValue) { 
     Advapi32Util.registrySetIntValue(root, keyPath, keyName, keyValue); 
    } 

    public static void registrySetLongValue(WinReg.HKEY root, String keyPath, String keyName, long keyValue) { 
     Advapi32Util.registrySetLongValue(root, keyPath, keyName, keyValue); 
    } 

    /** 
    * 
    * {@code Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "SOFTWARE\\StackOverflow");} 
    */ 
    public static void registryDeleteKey(WinReg.HKEY root, String keyPath) { 
     // Delete a key 
     Advapi32Util.registryDeleteKey(root, keyPath); 
    } 
} 

答えて

3

は、指定された環境変数の値をoptainするのに役立ちますSystem.getenv方法があります:

これは、これまでの私のクラスのソースコードは、環境変数へのアクセス。それ以外の場合はSecurityExceptionが投げられます。 <! - https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform - > net.java `:作品___JNA___ ** Mavenの依存関係**見つかり

+1

.dev.jna JNAプラットフォーム4.0.0 ' –

関連する問題