编辑Windows环境变量不起作用

时间:2014-09-19 15:38:53

标签: java environment-variables windows-8.1

如何使用Java代码和JNA在Windows上编辑系统或用户变量?我只发现this问题,但似乎没有帮助。为什么以下两个代码片段不起作用?

import com.sun.jna.Library;
import com.sun.jna.Native;

public class Environment
{
    public interface WinLibC extends Library
    {
        WinLibC INSTANCE = (WinLibC) Native.loadLibrary("msvcrt",
                WinLibC.class);

        public int _putenv(String name);
    }

    public static void main(String[] args)
    {
        WinLibC.INSTANCE._putenv("MYVARIABLE=MYVALUE");
    }
}

import com.sun.jna.Library;
import com.sun.jna.Native;

public class Environment
{
    WinLibC clib = (WinLibC) Native.loadLibrary("msvcrt", WinLibC.class);

    public Environment()
    {
        setenv("myVariable", "myValue");
    }

    public interface WinLibC extends Library
    {
        public int _putenv(String name);
    }

    public void setenv(String variable, String value)
    {
        clib._putenv(variable + "=" + value);
    }

    public static void main(String[] args)
    {
        new Environment();
    }
}

没有编写环境变量,没有任何反应。

1 个答案:

答案 0 :(得分:0)

您不应该需要JNA来获取环境变量。 System.getenv()正是这样做的。

另一方面,在Java中设置持久性环境变量通常是个坏主意。它使您的程序不那么可移植(不同的系统具有不同的环境变量可见性/持久性概念),并且它混淆了JVM与实际系统环境之间的区别。

当然,如果您绝对 ,则需要在Linux / Unix上使用setenv,在Windows上使用_putenv