使用Java运行.reg文件
我正在尝试用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
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本身不会输出任何内容,您需要从其输入流中读取数据并决定如何显示它