В настоящее время я преобразовываю приложение для использования CreateProcessW()
вместо Runtime.exec()
, поскольку мне нужна информация, которую оно предоставляет.Однако любой вызов CreateProcessW () завершается ошибкой с кодом ошибки 5 (ACCESS DENIED).Мне не удалось выяснить, почему это происходит, поскольку Runtime.exec () в этом случае работает нормально.
Моя ошибка может быть в одном из следующих фрагментов кода, вызове метода и интерфейсе jna.
public ProcessInfo createProcess(String dir, String name){
ProcessInfo pi = new ProcessInfo();
StartupInfo start = new StartupInfo();
mem.CreateProcessW(new WString(name),
null,
null,
null,
false,
0,
null,
new WString(dir),
start.getPointer(),
pi.getPointer());
return pi;
}
Мое определение CreateProcessW
boolean CreateProcessW(WString apname,
char[] comline,
Pointer p,
Pointer p2,
boolean inheritHandles,
int createFlags,
String environment,
WString directory,
Pointer startinf,
Pointer processInfo);
Дополнительная информация:
- Runtime.exec () успешно выполняется с указанными строками
- установлен размер StartupInfo
- Используемая среда тестирования: WinXP SP3 и Netbeans 6.9.1
Пример используемых параметров:
- Имя: moviemk.exe
- Dir: C: \ Program \ Movie Maker \
Также тестируется с разными путями, поэтому проблем с пробелами нет
Спасибо
Обновление:
Как выяснилось, ошибка была вызвана тем, что мой код вызова переключался между рабочими каталогами dir и exe после того, как я их проверил.Из-за полученного доступа отказано, я действительно думал, что он по крайней мере нашел exe.Я добавлю IllegalArgumentException для решения этой проблемы.
Поскольку у меня была дополнительная ошибка, связанная с тем, что exe-файл связан с рабочим каталогом, я приму этот ответ.Спасибо всем за помощь.