首页 > 解决方案 > 如何在 Java 中将环境指针传递给 Windows CreateProcess(使用 jna)

问题描述

我打电话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 并且不启动命令。

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

标签: javajnamsdncreateprocess

解决方案


啊所以看起来在使用CREATE_UNICODE_ENVIRONMENT时需要服用UTF-16LE byte[]。确保每个key=value后跟两个空值 aka (byte) 0)。最后再添加两个空字节。可以如上制作指针。


推荐阅读