Domanda

Io attualmente convertire un'applicazione da utilizzare al posto di CreateProcessW() Runtime.exec() come ho bisogno delle informazioni che fornisce. Tuttavia qualsiasi chiamata a CreateProcessW () non riesce con il codice di errore 5 (ACCESSO NEGATO). Sono stato in grado di scoprire il motivo per cui questo accade come Runtime.exec () funziona bene nello stesso caso.

Il mio errore potrebbe essere in uno dei seguenti frammenti di codice, la chiamata al metodo e l'interfaccia 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;
        }

La mia definizione di CreateProcessW

boolean CreateProcessW(WString apname,
                    char[] comline,
                    Pointer p,
                    Pointer p2,
                    boolean inheritHandles,
                    int createFlags,
                    String environment,
                    WString directory,
                    Pointer startinf,
                    Pointer processInfo);

Altre Informazioni:

  • Runtime.exec () riesce con le date stringhe
  • La dimensione del STARTUPINFO è impostato
  • Testenvironment utilizzato: WinXP SP3 e NetBeans 6.9.1

parametri di esempio utilizzato:

  • Nome: moviemk.exe
  • Dir: C: \ Programmi \ Movie Maker \

testato anche con diversi percorsi, quindi non è un problema di spazio bianco

Grazie

Aggiornamento:

Come si scopre l'errore è stato causato dal mio codice chiamante commutazione intorno dir e il percorso exe a lavorare dopo li ho controllato. A causa del conseguente accesso negato in realtà ho pensato che almeno ha trovato l'exe. Vorrei aggiungere un IllegalArgumentException per prendersi cura di questo problema.

Da quando ho avuto l'errore supplementare con l'exe essendo relativo alla directory di lavoro accetterò questa risposta. Grazie a tutti per l'aiuto.

È stato utile?

Soluzione

primo parametro di CreateProcessW deve essere un percorso completo o un percorso relativo alla directory corrente. Non può essere un percorso relativo al parametro directory di lavoro, che sembra quello che ci si aspetta di fare.

Prova a passare C:\Programme\Movie Maker\moviemk.exe come parametro name

Altri suggerimenti

Il primo parametro lpApplicationName del CreateProcess funzione verrà utilizzata come NULL genere e il secondo parametro lpCommandLine deve contenere la riga di comando inizia con il nome del programma che si desidera avviare.

A soli avannotti per passare il primo e il secondo parametri che si utilizzano attualmente dalla chiamata CreateProcessW.

Qual è il percorso completo si stanno inserendo? Runtime.exec potrebbe essere l'argomento citando internamente, e si potrebbe essere in esecuzione in questa situazione:

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

Forse c'è un prefisso al percorso che esiste ed è la causa per cercare di eseguire una cartella o un altro file?

Prova a mettere tra virgolette l'intero percorso e vedere se funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top