使用Java运行.reg文件

使用Java运行.reg文件,java,applet,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

我正在尝试用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

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

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

String[] cmd = {"regedit", "ihindi.reg"};
应该传递到
ihindi.reg
文件的完整路径,而不仅仅是文件名

而且

可能是对话框阻止了
waitFor()
调用返回

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

也可以考虑使用类似的方法:


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

String[] cmd = {"regedit", "ihindi.reg"};
应该传递到
ihindi.reg
文件的完整路径,而不仅仅是文件名

而且

可能是对话框阻止了
waitFor()
调用返回

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

也可以考虑使用类似的方法:


我认为问题在于您的路径,您当前的代码*.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();

我认为问题在于您的路径,您当前的代码*.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();

我认为您需要在中间添加“/s”语句,在将数据写入regedit时,您的进程可能会受到干扰。 我和你的情况完全一样,没有错误,但它无法写入regedit。“/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);
}

我认为您需要在中间添加“/s”语句,在将数据写入regedit时,您的进程可能会受到干扰。 我和你的情况完全一样,没有错误,但它无法写入regedit。“/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);
}

这可以通过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");

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

这可以通过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");

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

请发布您收到的错误的详细信息。我没有收到任何错误。我现在也包括了我的注册文件。我运行注册表文件,它的工作。但是我不能通过Java运行它。你可能需要显式地设置工作的directoryProcess本身不会输出任何东西,你需要从它的输入流中读取并决定如何显示它。请发布你收到的错误的详细信息。我没有收到任何错误。我现在也包括了我的注册文件。我运行注册表文件,它的工作。但我无法通过Java运行它。您可能需要显式设置工作的directoryProcess本身不会输出任何内容,您需要从其输入流中读取数据并决定如何显示它