Я звоню 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 и не запускал команду.
Я не понимаю, что я делаю неправильно. Должен ли я проверять файл журнала, который может указывать на проблему?