我正在尝试使用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
当我运行它时,它不会产生任何错误。我在哪里做错了?
答案 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");
使用此命令将在没有任何确认提示的情况下以静默方式执行。