【发布时间】:2015-03-18 06:28:45
【问题描述】:
我有一个关于在 C++ 中使用 RegCreateKeyEx 的问题。
当我尝试在 HKLM 下创建密钥时 - 它不起作用,
但在其他情况下(在 HKCU 创建密钥)- 它运行良好(可以创建密钥)。
我的操作系统是 win7 x86 - 使用 RegCreateKeyEx 时是否重要?
我运行的代码如下:
#include<Windows.h>
#include<stdio.h>
int main()
{
HKEY hKey;
LONG result = 0;
char filename[] = "C:\test.jpg";
char *path = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\test";
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
printf("1. success \n"); // ← doesn`t work
else printf("fail\n");
if (RegCreateKeyEx(HKEY_CURRENT_USER, "Console\papadaks", 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
printf("2. success \n"); // ← works well
else printf("fail\n");
return 0;
}
谢谢。
【问题讨论】:
-
这里有几个问题:请使用网络搜索来查找示例代码。 “不起作用”不足以描述问题。代码格式不一致。
"C:\test.jpg"是一个包含制表符的字符串文字。相应的函数究竟会发出什么错误信号,请查看他们的文档如何确定有关错误的更多信息。 -
首先,read the documentation 并特别注意访问权限和虚拟化部分。然后,使用FormatMessage 获取失败原因的实际描述。可能是参数不正确,也可能是安全问题,你不检查就不知道。
-
你也可以阅读这个:stackoverflow.com/questions/3146666/… 它基本上说除非你是一个提升的进程,否则你会遇到写入 HKLM 的问题。
-
失败时,GetLastError() 返回什么?能否在 winerror.h(定义所有错误代码的 Windows SDK 头文件)中搜索该错误代码?
标签: c++ registrykey