1

我正在尝试使用 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();
        }
    }
}

印地文.reg

Windows Registry Editor Version 5.00

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

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

4

4 回答 4

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);
}
于 2014-07-29T18:24:55.467 回答
1

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

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

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

还,

一个对话框可能会阻止该waitFor()调用返回。

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

此外,您可能会考虑像这样使用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();
        }
    }
于 2012-12-10T20:31:17.000 回答
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();
于 2012-12-10T20:33:36.407 回答
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");

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

于 2016-09-26T19:28:44.237 回答