在C#应用程序中写入注册表

Pee*_*Haa 43 c# registry

我正在尝试使用我的C#应用​​程序写入注册表.

我正在使用这里给出的答案:使用C#将值写入注册表

但是由于某种原因,密钥未添加到注册表中.

我正在使用以下代码:

string Timestamp = DateTime.Now.ToString("dd-MM-yyyy");

string key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\"+Application.ProductName+"\\"+Application.ProductVersion;
string valueName = "Trial Period";

Microsoft.Win32.Registry.SetValue(key, valueName, Timestamp, Microsoft.Win32.RegistryValueKind.String);
Run Code Online (Sandbox Code Playgroud)

Application.nameApplication.version"文件夹"不存在呢.

我必须先创建它们吗?

另外,我正在64b Win版本上测试它,所以我想如果我想检查注册表中添加的密钥我必须专门检查32位注册表:C:\ Windows\SysWOW64\regedit.exe不要我?

Sil*_*ilx 64

首先,如果要在LocalMachine下编辑密钥,则必须在管理员权限下运行应用程序(更好地使用CurrentUser,它更安全或在安装程序中创建密钥).您还必须在编辑模式下打开密钥(OpenSubKey方法)以添加新的子密钥.我检查了代码,它的工作原理.这是代码.

RegistryKey key = Registry.LocalMachine.OpenSubKey("Software",true);

key.CreateSubKey("AppName");
key = key.OpenSubKey("AppName", true);


key.CreateSubKey("AppVersion");
key = key.OpenSubKey("AppVersion", true);

key.SetValue("yourkey", "yourvalue");
Run Code Online (Sandbox Code Playgroud)

  • 将数据写入用户文件夹(Microsoft.Win32.Registry.CurrentUser - 而不是本地计算机 - Microsoft.Win32.Registry.LocalMachine更安全.http://msdn.microsoft.com/en-us/library/h5e7chcf.aspx (5认同)

Wra*_*cky 7

您可以使用以下代码创建和打开所需的注册表项。

RegistryKey SoftwareKey   = Registry.LocalMachine.OpenSubKey("Software",true);

RegistryKey AppNameKey    = SoftwareKey.CreateSubKey("AppName");
RegistryKey AppVersionKey = AppNameKey.CreateSubKey("AppVersion");

AppVersionKey.SetValue("yourkey", "yourvalue");
Run Code Online (Sandbox Code Playgroud)

您基本上可以将 CreateSubKey 用于所有应用程序设置,因为它会打开写入访问的密钥(如果它已经存在),否则会创建它。不需要先创建,再打开。当您绝对确定密钥已经存在时,OpenSubKey 会派上用场,例如在这种情况下,使用“HKEY_LOCAL_MACHINE\SOFTWARE\”


The*_*ing 6

还要检查您的注册表调用是否正在虚拟化.有关更多信息,请参见此处

如果您的应用程序不是UAC可识别的并且出于兼容性原因而发生,则可能发生

Real path
HKEY_LOCAL_MACHINE\Software\FooKey

Virtual path
HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\FooKey
Run Code Online (Sandbox Code Playgroud)