Domanda

Voglio eseguire un programma di installazione setup.exe che installa un software su Vista con Java 1.6.

L'utente non è un amministratore. Quando provo ad avviare il processo ricevo il messaggio di errore:

CreateProcess error=740

che indica che l'utente non dispone di diritti sufficienti per avviare il processo.

Posso inviare un flag o un'opzione per indicare, il processo dovrebbe essere eseguito con i diritti di amministratore? Vista stessa ha questa funzionalità nella barra degli strumenti del menu. Posso usare questa funzione in Java.

Chiamo il seguente codice

        Runtime rt = Runtime.getRuntime();
        Process process;
        try {
            String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath();

            if (logger.isDebugEnabled()) {
                logger.debug("Execute runtime process");
            }
            process = rt.exec(fileToExecute, null, mFolder);

            process.getErrorStream().close();
            process.getInputStream().close();
            process.getOutputStream().close();

            if (logger.isDebugEnabled()) {
                logger.debug("Wait until process is finished");
            }
            process.waitFor();
        } catch (IOException e) {
            throw new StartException(e);
        } catch (InterruptedException e) {
            throw new StartException(e);
        }
È stato utile?

Soluzione 2

Dopo 2 giorni di test ho trovato la seguente soluzione.

L'errore si presenta quando la funzionalità UAC di Vista è attivata. Controllo dell'account utente mostra una finestra di dialogo delle domande ogni volta, quando un processo necessita dei diritti di amministratore.

Mostrare questa finestra di dialogo causa il problema.

Invece di usare il vecchio

process = rt.exec(fileToExecute, null, mFolder);

comando, sto usando ora il nuovo 1.5 ProcessBuilder comando

Modifica

Per evitare il problema devi aprire una finestra di comando che richiede l'autorizzazione. E poi devi chiamare il processo esterno.

ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });

Descritto anche qui Esegui un programma esterno

Altri suggerimenti

(Non l'ho provato), ma sembra che tu possa farlo usando il " elevate " programma da qui

leggi anche questo per la panoramica UAC

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