我正在调用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并且没有启动命令。
我不明白我做错了什么。我应该检查可能暗示问题的日志文件吗?
答案 0 :(得分:1)
啊所以在使用CREATE_UNICODE_ENVIRONMENT
时似乎需要UTF-16LE
byte[]
。确保每个key=value
后跟两个空值(byte) 0)
。最后添加两个空字节。指针可以如上所示。