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