web-dev-qa-db-ja.com

C#-ユーザー確認ボックスなしでレジストリファイルをレジストリにインポートする

C#winforms-regファイルをレジストリにインポートするにはどうすればよいですか?次のコードは、ユーザーに確認ボックスを表示しています(はい/いいえ)。

Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working
regeditProcess.WaitForExit(); 
30
Power-Mosfet

ファイルをパラメータとしてregedit.exeに送信します。

Process regeditProcess = Process.Start("regedit.exe", "/s key.reg");
regeditProcess.WaitForExit();
46
Kobi

回答2のコードは正しいですが、完全ではありません。参照しているディレクトリのパス/ファイルにスペースがない場合に機能します。例:C:\ ProgramFiles\key.regは正常に機能しますが、C:\ Program Files\key.regは機能しませんパスにスペースがあるためです。

ソリューション:

string directory= @"C:\Program Files (x86)\key.reg";
Process regeditProcess = Process.Start("regedit.exe", "/s \"" + directory + "\"");
regeditProcess.WaitForExit();
13
ses

RegEditを起動しようとしましたが、確認プロンプトが表示されるたびに(UACが有効になり、昇格されたアクセス許可はありません)。 RegEditの代わりに "reg.exe"を推奨します(XP以降Windowsに含まれています)。

            Process proc = new Process();

            try
            {
                proc.StartInfo.FileName = "reg.exe";
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.UseShellExecute = false;

                string command = "import " + path;
                proc.StartInfo.Arguments = command;
                proc.Start();

                proc.WaitForExit();
            }
            catch (System.Exception)
            {
                proc.Dispose();
            }

ダイアログなし、プロンプトなし。

コマンドは「reg import path/to/the/reg.reg」のようなものです

8
Robert Muehsig

.regファイルを実行する代わりに、 Microsoft.Win32 名前空間で提供される機能を使用して、レジストリを変更できます。

このAPIを使用して レジストリキーを作成 するのは非常に簡単です。

RegistryKey key = Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();

新しいキーの一括読み込みを作成する必要がない限り、APIはよりスケーラブルで保守可能なアプローチだと思います。ある時点で、システム全体またはレジストリのユーザーごとのブランチに設定を書き込むことをオプションにすることを決定する必要がある場合、ほとんどのコードはどちらの場合でも再利用できます。変更を行う別のキーを選択するだけです。

おそらくもっと重要なことは、APIを使用すると、挿入するキーが既にレジストリに存在する場合の処理​​方法を(コードで)正確に指定できます。既存のキーを削除して自分のものを挿入し、既存のキー内の値を更新し、黙って無視するか、例外を発生させる必要がありますか?

6