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

此处还描述了执行外部程序