Start Java Runtime Process with Administrator rights on Vista

给你一囗甜甜゛ 提交于 2019-12-10 06:13:32

问题


i want to execute a setup.exe installer which installes a software on vista with java 1.6.

The user is not an administrator. When i try to start the process i get the error message:

CreateProcess error=740

which indicates, that the user has not enough rights for starting the process.

Can i submit a flag or an option to indicate, the the process should execute with administrator rights? Vista itself does have this functionality inside the menu toolbar. Can i use this function in Java.

I call the following code

        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);
        }

回答1:


(I have not tried this), but it seems that you can do this using the "elevate" program from here

also read this for UAC overview




回答2:


After 2 days of testing i found the following solution.

The error comes up when the Vista UAC functionality is activated. UAC shows a question dialog everytime, when a process needs administrator rights.

Showing this dialog causes the issue.

Instead of using the old

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

command, i am using now the new 1.5 ProcessBuilder command

EDIT:

To avoid the problem you have to open a command window which requests the permission. And than you have to call the external process.

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

Also described here Execute an external Program



来源:https://stackoverflow.com/questions/1420901/start-java-runtime-process-with-administrator-rights-on-vista

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!