2009-09-14 123 views
4

我想执行setup.exe安装程序,该安装程序在使用java 1.6的vista上安装软件。在Vista上启动具有管理员权限的Java运行时进程

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

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

纠正我,如果我错了这一点,但似乎你问的方式,允许“的setup.exe”安装程序覆盖OS和给自己行政特权!当然,我可能会误解,但这听起来很危险。 – pavium 2009-09-14 11:56:03

+0

我想要的是,Vista在打开带权限的文件之前/期间要求输入管理员用户名/密码。 – 2009-09-14 12:05:46

+0

是的,我明白了,那会更好。 Vista要求输入用户名和密码,然后继续执行。 – pavium 2009-09-14 12:15:45

回答

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

3

(我没有试过),但似乎可以从here

也读this对UAC概览中使用“提升”计划

相关问题