2014-03-06 54 views
1
try { 
    final String REG_ADD_CMD ="cmd /c reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\"+ 
           "Microsoft\\Windows\\CurrentVersion\\WindowsUpdate"+ 
           "\\Auto Update\" /v AUOptions /t REG_DWORD /d 1 /f"; 
    Process objProcess; 
    //objProcess cmd /c = Runtime.getRuntime().exec(new String[] 
    //{"REG ADD \"", " HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows 
    //\\CurrentVersion\\WindowsUpdate\\Auto Update"," /v AUOptions /t REG_DWORD /d 1 /f"}); 

    objProcess = Runtime.getRuntime().exec(REG_ADD_CMD); 
    System.out.println("REG_ADD_CMD:::"+REG_ADD_CMD); 
    BufferedReader reader=new BufferedReader(new InputStreamReader(objProcess.getInputStream())); 
    String line=reader.readLine(); 
    System.out.println("Windows auto update::::"+line); 
    final int exitStatus = objProcess.waitFor(); 
    int exitVal = objProcess.exitValue(); 
    System.out.println("exitStatus::::"+exitStatus); 
    System.out.println("exitVal::::"+exitVal); 
    //System.out.println("Processed finished with status: " + exitVal); 

    if(exitStatus != 0){ 
     System.err.println("Error while installing application!!"); 
    } 
     //objProcess = Runtime.getRuntime().exec("reg add "HKEY_LOCAL_MACHINE\SOFTWARE\"+ 
//       "Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 1 /f"); 
} 
    catch (InterruptedException ex) { 
     ex.printStackTrace(); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

這是我的代碼,一旦我執行我得到性反應爲「操作成功完成」我的控制檯,但魔鬼在Windows 7在Windows自動更新它不是在控制面板中反映 可以幫助解決這個問題。 感謝禁用Windows自動更新使用Java

+1

哦,我是一個多麼長的頭銜! – Incognito

+0

使用java在Windows 7中禁用Windows自動更新 – user2563648

+0

^現在這是一個更有趣的標題:) – Incognito

回答

0

你會更好使用的ProcessBuilder,或至少需要一個String[],而不是一個字符串,如單串EXEC的Runtime.exec幾乎可以肯定不會分手了的話,你希望它的方式。

您不需要在包含空格的參數四周添加額外的引號。

+0

我認爲問題很可能是緩存註冊表值。更優雅地調用「reg」命令不會解決這個問題。 –

+0

我試過上面的code.Am在控制檯中得到「操作成功完成」,但它在控制面板中沒有反映出來。請在控制面板中找到一種方法 – user2563648

2

我認爲你是錯誤的方式。事實上,Windows在註冊表中存儲了大量的配置信息。但是,這並不意味着存儲此信息並在啓動時讀取它的組件會對註冊表值執行輪詢,以查看其他人是否已更改了該值。

這就是你的情況。有一個組件負責自動更新。它在系統啓動並從註冊表中讀取其配置時啓動。然後您更改註冊表值,但此組件不知道任何有關此。

要正確執行此操作,您應該找到可以調用它的API。幸運的是,有人已經實現了執行此任務的命令行實用程序:http://www.intelliadmin.com/index.php/2012/10/manage-automatic-updates-from-the-command-line/

看一看這篇文章。從java運行該實用程序,並希望它可以爲你工作。我相信還有其他解決方案可以做類似的事情。例如,看看WMI。如果您找到了WMI API,那麼您可以編寫JScript或VBScript,然後使用cscript解釋器從java中運行它。

+0

可以請你具體說明一下。因爲我不擅長java .. – user2563648

+0

具體什麼不明確? – AlexR

+0

請告訴如何從java運行實用程序? – user2563648