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();
        }
    }
}

ihindi.reg

Windows Registry Editor Version 5.00

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

私がそれを実行するとき、それは何もエラーを起こさない。私はどこで間違っているのですか?

4

4 に答える 4

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();
        }
    }
于 2012-12-10T20:31:17.000 に答える
1

問題はパスだと思います。現在のコード *.reg は、jar ファイルと同じディレクトリにある必要があります。ただし、 usong の場合は作業ディレクトリを明示的に設定できます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 に答える