【问题标题】:Disable Windows Auto Update Using Java使用 Java 禁用 Windows 自动更新
【发布时间】:2014-03-06 07:58:36
【问题描述】:
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 自动更新的代码。一旦我执行,我的控制台中就会收到“操作成功完成”的响应,但它没有反映在控制面板中 有人可以帮忙吗? 谢谢

【问题讨论】:

  • 天哪,标题好长!
  • 使用 java 在 windows 7 中禁用 windows 自动更新
  • ^ 现在这是一个更有趣的标题:)
  • 我是否需要在代码中添加一些内容以反映控制面板中的更改。在 cmd 提示符下执行时,command 工作正常。

标签: java swing process controlpanel


【解决方案1】:

我认为你走错了路。事实上,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 运行该实用程序?
  • 您可以像使用System.exec()ProcessBuilder 运行任何其他实用程序一样运行它。
【解决方案2】:

你最好使用 ProcessBuilder,或者至少是 Runtime.exec,它接受 String[] 而不是单个字符串,因为单字符串 exec 几乎肯定不会按照你想要的方式拆分单词到。

Process objProcess = Runtime.getRuntime().exec(new String[] {
   "cmd", "/c", "reg", "add",
   "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update",
    "/v", "AUOptions", "/t", "REG_DWORD",
    "/d", "1", "/f"
});

您无需在包含空格的参数周围添加额外的引号。

【讨论】:

  • 我认为问题很可能是缓存注册表值。更优雅地调用“reg”命令并​​不能解决这个问题。
  • 我试过上面的代码。在控制台中得到“操作成功完成”。但它没有反映在控制面板中。请建议一种进入控制面板的方法
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2010-12-14
  • 2017-11-17
相关资源
最近更新 更多