我已经获得了大部分用于向Windows注册表写入值的代码,但是当我将路径更改为虚拟键和我为测试设置的值时,它失败了.我的代码如下:
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\TestSoftware");
LONG openRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS , &hKey);
if (openRes==ERROR_SUCCESS) {
printf("Success opening key.");
} else {
printf("Error opening key.");
}
LPCTSTR value = TEXT("TestSoftwareKey");
LPCTSTR data = "TestData\0";
LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS) {
printf("Success writing to Registry.");
} else {
printf("Error writing to Registry.");
}
LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
printf("Success closing key.");
} else {
printf("Error …Run Code Online (Sandbox Code Playgroud) 我将应用程序设置存储在HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany分支下.不同用户的设置必须相同,这就是设置不在HKEY_CURRENT_USER下的原因.注册表值仅在使用应用程序期间读取.
现在,在Windows Vista中,由于UAC,您不能再使用以下代码来读取注册表值:
RegistryKey myKey = Registry.LocalMachine.CreateSubKey
("SOFTWARE\\MyCompany\\MyAppName");
Run Code Online (Sandbox Code Playgroud)
如何在我的代码(C#)中读取LocalMachine分支的值?
我希望我的程序能够编辑驻留在"HKEY_LOCAL_MACHINE"中的注册表项中的值
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData")
Run Code Online (Sandbox Code Playgroud)
以上在Windows XP中工作正常,但在Vista中引发了UnauthorizedAccessException.