如何在Java中将环境指针传递给Windows CreateProcess(使用jna)

时间:2018-05-25 03:09:56

标签: java jna msdn createprocess

我正在调用Kernel32.Instance.CreateProcess来启动一个独立的进程。我面临的一个问题是,每次执行此过程时,都会尝试将环境块传递给CreateProcess

我第一次使用

Advapi32Util.getEnvironmentBlock(environment)

创建块,然后创建一个指针(需要CreateProcess(我用过:

public static Pointer asPointer(String string) {
    byte[] data;
    try {
        data = Native.toByteArray(string, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e);
    }
    Pointer pointer = new Memory(data.length + 1);
    pointer.write(0, data, 0, data.length);
    pointer.setByte(data.length, (byte) 0);
    return pointer;
}

我认为结果需要产生双重空值。我确实设置了CREATE_UNICODE_ENVIRONMENT,所以我尝试在Memory的末尾添加两个额外的空值。这仍然导致CreateProcess返回false并且没有启动命令。

我不明白我做错了什么。我应该检查可能暗示问题的日志文件吗?

1 个答案:

答案 0 :(得分:1)

啊所以在使用CREATE_UNICODE_ENVIRONMENT时似乎需要UTF-16LE byte[]。确保每个key=value后跟两个空值(byte) 0)。最后添加两个空字节。指针可以如上所示。