使用Vista的管理员权限启动Java Runtime Process
我想执行一个setup.exe安装程序,它使用java 1.6在vista上安装软件。
用户不是管理员。 当我尝试启动该过程时,我收到错误消息:
CreateProcess error=740
表示用户没有足够的权限启动该过程。
我可以提交一个标志或一个选项来表明,该过程应该以管理员权限执行吗? Vista本身在菜单工具栏中具有此function。 我可以在Java中使用此function吗?
我调用以下代码
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); }
(我没试过这个),但似乎你可以使用这里的“提升”程序来做到这一点
还请阅读此内容以获取UAC概述
经过2天的测试,我发现了以下解决方案。
启动Vista UACfunction时出现错误。 当进程需要管理员权限时,UAC每次都会显示一个问题对话框。
显示此对话框会导致问题。
而不是使用旧的
process = rt.exec(fileToExecute, null, mFolder);
命令,我现在使用新的1.5 ProcessBuilder命令
编辑:
要避免此问题,您必须打开一个请求权限的命令窗口。 而且你必须调用外部进程。
ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });
此处还描述了执行外部程序