Вопрос

В настоящее время я преобразую приложение для использования CreateProcessW() вместо Runtime.exec() Как мне нужна информация, которую он предоставляет. Однако любой вызов CreateProcessw () не спускается с кодом ошибки 5 (доступ к доступу). Я не смог выяснить, почему это происходит, поскольку 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 установлен
  • Используется TestenVironment: Winxp SP3 и NetBeans 6.9.1

Пример используемых параметров:

  • Имя: Moviemk.exe
  • Dir: C: Program Movie Maker

Также тестируется с разными путями, так что не проблема с пробелом

Спасибо

Обновлять:

Как выясняется, ошибка была вызвана переключением моего вызового кода вокруг рабочего Dir и Exe Path после того, как я их проверил. Из -за полученного доступа я действительно думал, что он, по крайней мере, нашел EXE. Я добавлю нелегаларгументацию, чтобы позаботиться об этой проблеме.

Поскольку у меня была дополнительная ошибка с EXE относительно рабочего режима, я приму этот ответ. Спасибо всем за помощь.

Это было полезно?

Решение

Первым параметром CreateProcessw должен быть либо полный путь, либо путь относительно текущего каталога. Это не может быть пути относительно параметра рабочего каталога, который, кажется, то, что вы ожидаете.

Попробуй пройти C:\Programme\Movie Maker\moviemk.exe как параметр имени

Другие советы

Первый параметр lpApplicationName принадлежащий CreateProcess функция будет использоваться как NULL обычно и второй параметр lpCommandLine должен содержать командную строку, начиная с имени программы, которое вы хотите начать.

Просто жарить, чтобы переключить первые и вторые параметры, которые вы используете в настоящее время на CreateProcessW вызов.

Какой полный путь вы входите? Runtime.exec может процитировать этот аргумент внутренне, и вы можете столкнуться с этой ситуацией:

http://support.microsoft.com/kb/179147

Может быть, есть префикс на пути, который существует и заставляет его попытаться выполнить папку или другой файл?

Попробуйте поместить цитаты по всему пути и посмотрите, поможет ли это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top