带Java的Run.reg文件

时间:2012-12-10 20:10:43

标签: java applet

我正在尝试使用Java运行reg文件。我试了这个没有运气:

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

public class RegEdit {

    public static void main(String[] args) throws IOException {

//      Desktop.getDesktop().open(new File("ihindi.reg"));

        String[] cmd = {"regedit", "ihindi.reg"};
        Process p = Runtime.getRuntime().exec(cmd);
        try {
            p.waitFor();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

ihindi.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"HomePage"=dword:00000001

当我运行它时,它不会产生任何错误。我在哪里做错了?

4 个答案:

答案 0 :(得分:2)

我认为你需要添加" / s"介于两者之间的陈述,当您将数据写入注册表时,您的过程可能会受到干扰。 我和你的情况完全相同,没有错误,但它无法写入注册表。 " / s"做了这个工作。

try{
 // silence all the process without prompting the dialog box to ask if user wanna proceed.
     String[] cmd = { "regedit.exe", "/s", regFilePath};
     Process process = Runtime.getRuntime().exec(cmd);
     process.waitFor();
}catch (InterruptedException e){
     System.out.println(e);
}

答案 1 :(得分:1)

这有各种各样的问题。以下一行:

String[] cmd = {"regedit", "ihindi.reg"};

应该传递ihindi.reg文件的完整路径,而不仅仅是文件名。

另外,

对话框可能会阻止waitFor()来电回复。

您应该使用/s开关调用regedit以使这些对话框静音。

另外,您可以考虑使用ProcessBuilder之类的:

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

public class RegEdit {

    public static void main(String[] args) throws IOException {

//      Desktop.getDesktop().open(new File("ihindi.reg"));

        //you will need to figure this out
        String ihindiPath = getIhindiPath();

        ProcessBuilder processBuilder = new ProcessBuilder("regedit", "/s", ihindiPath) 

        try {
            processBuilder.start().waitFor();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

答案 2 :(得分:1)

我认为问题是你的路径,你当前的代码* .reg必须与jar文件在同一个目录中。但是,当使用ProcessBuilder

时,您可以明确地设置工作目录
 ProcessBuilder pb = new ProcessBuilder("regedit", "myreg.reg");
 pb.directory("c:/");//thus our file should be located in c:\myreg.reg
 Process p = pb.start();

答案 3 :(得分:0)

这可以通过JAVA中的Process Builder实现。请考虑以下示例:

ProcessBuilder processBuilder = new ProcessBuilder("regedit", "reg_file_to_run.reg");
Process processToExecute = processBuilder.start();

然后您可以选择等待此行完成流程执行:

processToExecute.waitFor();

注意:如果注册表文件中的命令在更改注册表项时要求提供确认提示,则可以使用' / s' 选项以静默方式执行此操作。像这样:

ProcessBuilder processBuilder = new ProcessBuilder("regedit", "/s", "reg_file_to_run.reg");

使用此命令将在没有任何确认提示的情况下以静默方式执行。