java - 使用 Java 禁用 Windows 自动更新

标签 java swing process controlpanel

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/

相关文章:

java - 公历 GUI - 问题

c - 子进程在 C 中终止后,父进程未完成

java - 动态地从 json 字符串创建和读取树数据结构

java - 如何在 Java 中使用 dcm4che3 创建 DICOM MWL 查询?

java - 即使 session 被破坏也获取旧 session 值

java - 无法获取文本字符串的值

java - jtable中未显示数据

bash - 如何在不产生两个进程的情况下以不同的用户身份运行 nohup?

linux - 当操作系统等待用户输入时,CPU 是否仍在执行任何指令?

java - 在 Java 中搜索和替换单词