2

を使用してレジストリに直接書き込みたいと思っていますMicrosoft.Win32.Registry。私はこれを次のようなregファイルで行うことができます:

swreg = File.AppendText(strRegPath); //Opens the file:

swreg.WriteLine(@"[HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts\user@domain.com");
swreg.WriteLine("\"DCEmail\"=dword:00000002");
swreg.WriteLine("\"POP3 Server\"=\"10.0.0.200\""); 
swreg.WriteLine("\"POP3 Port\"=dword:0000006e");

これによりregファイルが作成され、regキーを作成するファイルを実行できます。私は次のように似たようなことを試みましMicrosoft.Win32.Registryた:

var RKOutlook = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts");

if (RKOutlook.OpenSubKey("user@domain.com") == null)
{
    RKOutlook.CreateSubKey("user@domain.com");
    RKOutlook = RKOutlook.OpenSubKey("user@domain.com", true);
}

ただし、System.NullReferenceException was unhandledエラーが発生します。reg ファイルを使用せずにレジストリに直接書き込むにはどうすればよいですか?

4

2 に答える 2

1

レジストリからの読み取りとレジストリへの書き込み

このコードは VB.NET ですが、C# に変換できます。次のコードは、HKEY_CURRENT_USER から文字列を読み取る方法を示しています。

Microsoft.Win32.RegistryKey regVersion = null;
dynamic keyValue = "Software\\Microsoft\\TestApp\\1.0";
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyValue, false);
int intVersion = 0;
if (regVersion != null) {
    intVersion = regVersion.GetValue("Version", 0);
    regVersion.Close();
}

次のコードは、文字列を読み取り、インクリメントして、HKEY_CURRENT_USER に書き込みます。

var regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0", true);
if (regVersion == null) {
    // Key doesn't exist; create it.
    regVersion = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0");
}

int intVersion = 0;
if (regVersion != null) {
    intVersion = regVersion.GetValue("Version", 0);
    intVersion = intVersion + 1;
    regVersion.SetValue("Version", intVersion);
    regVersion.Close();
}
于 2013-09-23T15:12:00.467 に答える