2009-09-14 49 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概覽中使用「提升」計劃

相關問題