Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java禁用Windows自动更新_Java_Swing_Process_Controlpanel - Fatal编程技术网

使用Java禁用Windows自动更新

使用Java禁用Windows自动更新,java,swing,process,controlpanel,Java,Swing,Process,Controlpanel,这是我在Windows7中禁用windows自动更新的代码。一旦执行,我会在控制台中得到“操作成功完成”的响应,但它不会反映在控制面板中 有人能帮忙吗。 谢谢您最好使用ProcessBuilder,或者至少使用运行时.exec,它接受字符串[],而不是单个字符串,因为单个字符串exec几乎肯定不会按您希望的方式拆分单词 try { final String REG_ADD_CMD ="cmd /c reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\"+

这是我在Windows7中禁用windows自动更新的代码。一旦执行,我会在控制台中得到“操作成功完成”的响应,但它不会反映在控制面板中 有人能帮忙吗。
谢谢

您最好使用ProcessBuilder,或者至少使用
运行时.exec
,它接受
字符串[]
,而不是单个字符串,因为单个字符串exec几乎肯定不会按您希望的方式拆分单词

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在注册表中存储了很多配置信息。然而,这并不意味着存储该信息并在启动时读取该信息的组件对注册表值执行轮询,以查看是否有其他人更改了该值

这就是你的情况。有一个组件负责自动更新。它在系统启动时启动,并从注册表读取其配置。然后更改注册表值,但该组件对此一无所知

要正确执行此操作,您应该找到执行此操作的API并调用它。幸运的是,已经有人实现了执行此任务的命令行实用程序:


看看这篇文章。从java运行该实用程序,希望它能为您工作。我相信还有其他类似的解决方案。例如,看看WMI。如果您找到了执行此操作的WMI API,则可以编写JScript或VBScript,然后使用
cscript
解释器从java运行它

哦,我的天啊,多么长的标题啊!要在windows 7中使用java^禁用windows自动更新,现在有一个更有趣的标题:)我是否需要在代码中添加一些内容以反映控制面板中的更改。在cmd提示符中执行命令时,该命令工作正常。我认为问题可能是注册表值的缓存。更优雅地调用“reg”命令并不能解决这个问题。我尝试了上面的代码。我得到了“操作成功完成”在控制台中。但它不反映在控制面板中。请建议一种进入控制面板的方法。请告诉如何从java运行该实用程序?您可以使用
System.exec()
ProcessBuilder
完全像运行任何其他实用程序一样运行它。
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"
});