gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:24 26 4
gpt4 key购买 nike

我正在调用 Kernel32.Instance.CreateProcess 来启动一个分离进程。我面临的一个问题是每次我都尝试将环境 block 传递给 CreateProcess,但进程没有启动。

我第一次用

Advapi32Util.getEnvironmentBlock(environment)

创建 block ,然后创建一个指针(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 后跟两个空值,也就是 (byte) 0)。最后再添加两个空字节。指针可以如上制作。

关于java - 如何在 Java 中将环境指针传递给 Windows CreateProcess(使用 jna),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com