使用Vista的管理员权限启动Java Runtime Process

时间:2009-09-14 11:01:15

标签: java windows-vista process runtime privileges

我想执行一个setup.exe安装程序,它使用java 1.6在vista上安装软件。

用户不是管理员。当我尝试启动该过程时,我收到错误消息:

CreateProcess error=740

表示用户没有足够的权限启动该过程。

我可以提交一个标志或选项来表明,该过程应该以管理员权限执行吗? Vista本身在菜单工具栏中具有此功能。我可以在Java中使用此功能。

我调用以下代码

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

2 个答案:

答案 0 :(得分:3)

(我没试过这个),但似乎你可以使用here中的“提升”程序来做到这一点

还阅读this了解UAC概述

答案 1 :(得分:2)

经过2天的测试后,我找到了以下解决方案。

启用Vista UAC功能时出现错误。当进程需要管理员权限时,UAC每次都会显示一个问题对话框。

显示此对话框会导致问题。

而不是使用旧的

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

命令,我现在正在使用新的1.5 ProcessBuilder命令

修改

要避免此问题,您必须打开一个请求权限的命令窗口。而且你必须打电话给外部过程。

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

此处还介绍了Execute an external Program