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 自动更新的代码。执行后,我的控制台中会收到“操作成功完成”的响应,但它没有反射(reflect)在控制面板中 有人可以帮忙解决这个问题吗? 谢谢
最佳答案
我认为你走错了路。事实上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 运行它。
关于java - 使用 Java 禁用 Windows 自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22218427/