我有以下代码,试图允许程序在启动时运行:
HKEY key;
if(RegOpenKey(HKEY_CURRENT_USER,LPCWSTR("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&key) != ERROR_SUCCESS) {
std::cout<<"Unable to open Reg key last error - "<<GetLastError()<<"\n";
system("pause");
}
省略不必要的部件。它打印出创建具有错误代码18的注册表项时出错,根据this page表示我遇到了返回ERROR_NO_MORE_FILES
的错误。不幸的是,描述说的是同样的事情,我不知道在创建注册表项时这意味着什么。我尝试以管理员身份运行程序,密钥也不存在。谢谢。
答案 0 :(得分:4)
如果您阅读documentation,则说明:
返回值
“如果函数成功,则返回值为ERROR_SUCCESS。 如果函数失败,则返回值是Winerror.h中定义的非零错误代码。您可以将FormatMessage函数与FORMAT_MESSAGE_FROM_SYSTEM标志一起使用,以获取错误的一般描述。“
它没有声明调用GetLastError()。此外,这与C ++无关。
答案 1 :(得分:1)
您的错误检查错误。注册表API函数返回错误代码。他们不使用SetLastError
。您必须使用函数返回的错误代码来诊断错误。
代码中的明显错误是强制转换为宽文本。这并没有改变你的字符串实际上是8位文本的事实。使用L
前缀。
L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"
对于它的价值,你应该使用RegOpenKeyEx
打开密钥而不是RegOpenKey
。要创建密钥,请使用RegCreateKeyEx
。
答案 2 :(得分:0)
我尝试在正在运行的进程没有足够权限的注册表项上调用GetLastError()
时得到了相同的结果(ERROR_NO_MORE_FILES
返回RegCreateKeyEx()
)(在我的情况下&#34; HKLM \系统\ CurrentControlSet \服务\事件日志\应用&#34)。 使用提升的权限启动进程时,它已成功。
因此,错误代码18和UAC之间可能存在连接。