繁体   English   中英

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

[英]How to pass a Environment Pointer to Windows CreateProcess in Java (using 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而不是启动命令。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM