c++-RegOpenKeyEx调用失败返回5 ,管理员运行不管用 win7VS2013 请问怎么回事?

问题描述

RegOpenKeyEx调用失败返回5 ,管理员运行不管用 win7VS2013 请问怎么回事?

代码
LONG lRegRet;
HLOCAL hLocal;
HKEY hKeyUser;
PTSTR pszEnvironmentName = NULL;
PTSTR pszEnvironmentValue = NULL;

pszEnvironmentName = (PTSTR)malloc(MAX_PATH * sizeof(TCHAR));
GetDlgItemText(hDlg, IDD_EDIT_NAME, pszEnvironmentName, MAX_PATH);

pszEnvironmentValue = (PTSTR)malloc(1024 * sizeof(TCHAR) * 3);
GetDlgItemText(hDlg, IDD_EDIT_VALUE, pszEnvironmentValue,
1024 * sizeof(TCHAR) * 3);

//修改用户环境变量
lRegRet = RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, KEY_ALL_ACCESS, 0, &hKeyUser);
if (lRegRet != ERROR_SUCCESS)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lRegRet,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (PTSTR)&hLocal, 0, NULL);

MessageBox(hDlg, (PCTSTR)LocalLock(hLocal), TEXT("错误"), MB_OK);
break;
}
RegSetValueEx(hKeyUser, pszEnvironmentName, 0, REG_SZ,
(const unsigned char *)pszEnvironmentValue,
wcslen(pszEnvironmentValue) + sizeof(TCHAR));
RegCloseKey(hKeyUser);
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Environment"));

//释放分配的内存
free(pszEnvironmentValue);
free(pszEnvironmentName);

解决方案

找到原因了,RegOpenKeyEx函数的参数你写倒了,第三位是ulOption保留,通常必须设置为0,第四位是samDesired用来设置对键访问的权限,你刚好写反了。

lRegRet = RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, 0, KEY_ALL_ACCESS, &hKeyUser);

解决方案二:

使用下面的试一下

RegOpenKeyEx(HKEY_CURRENT_USER, USER_ENVREG, KEY_ALL_ACCESS|KEY_WOW64_32KEY, 0, &hKeyUser);

解决方案三:

USER_ENVREG 指定的注册表路径你打开看看,检查一下它的permission选项,是不是设置了不允许访问等

解决方案四:

先直接使用下面的试一下,就是Environment后面去掉两个反斜杠

RegOpenKeyEx(HKEY_CURRENT_USER, "Environment", KEY_ALL_ACCESS, 0, &hKeyUser);
时间: 2024-11-05 14:40:36

c++-RegOpenKeyEx调用失败返回5 ,管理员运行不管用 win7VS2013 请问怎么回事?的相关文章

应用-CreateWindow()调用失败返回空句柄,而GetLastError却返回0!

问题描述 CreateWindow()调用失败返回空句柄,而GetLastError却返回0! 下面一段代码我是按照某本书上抄的, #include /////////////////////////////窗口过程声明/////////////////////////////////// LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); /////////////////////////////填充窗口类的函数声明///////////

请问MFC跨线程能不能调用对方线程里正在运行的函数?

问题描述 请问MFC跨线程能不能调用对方线程里正在运行的函数? 请问MFC跨线程能不能调用对方线程里正在运行的函数?怎么得到当前正在运行的线程运行的是哪一个函数的函数名?谢谢 解决方案 可以让每个线程在执行自己的时候先将函数名放在全局变量中,这样可以通过别的线程进行检索. 解决方案二: 如何在c语言中调用一个函数,使其运行在NSRunLoop的线程中一个函数能否被两个线程同时调用

Win7 注册ocx控件 “DllRegisterServer的调用失败,错误代码为0x80040200 ”

在win7系统下,在运行里运行regsvr32 *.OCX 时,出来"*.OCX 已加载,但对DllRegisterServer的调用失败,错误代码为0x80040200"的错误提示:      解决方法: 1.在Windows7下打开控制面版-用户帐号-更改用户帐户控制设置(运行-->>msconfig-->>工具-->>UAC管理调整),将始终通知下面的小方块托动到最下面,如下图:      然后重启电脑,再重新运行regsvr32 COMDLG

解决-但对DllRegisterServer的调用失败,错误代码为0x80004005”

问题描述 但对DllRegisterServer的调用失败,错误代码为0x80004005" 在c#运行报 库没有注册,我在网上查了一下说在运行中输入'Regsvr32 scrrun.dll'就可以解决,但我在运行中操作又报"模块"scrrun.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005"错误,求解决!! 解决方案 试试以管理员Administrator身份运行操作 解决方案二: regsvr32需要管

异常-rmi通讯部分方法调用成功,部分调用失败

问题描述 rmi通讯部分方法调用成功,部分调用失败 rmi运行一段时间后,可能是几天也可能是几周.突然rmi客户端出现部分rmi方法调用不通.抛异常java.rmi.unmarshalException:error unmarshlling return;nested exception is; java.io.EOFException at sum.rmi.server.UnicastRef.invoke(UnicastRef.java:173)

Server.CreateObject调用失败的问题

给服务器安装JMAIL组件,可是在使用过程中遇到Server.CreateObject 的调用失败的问题.上网搜索到解决方法,这里将安装步骤记录一下. 一,开启25端口. 二,安装好JMAIL,将JMAIL.DLL 复制到system32文件夹下一份. 三,运行"regsvr32 jmail.dll "提示注册成功 四,测试 Set jm = Server.CreateObject("JMAIL.Message") 这句是否能通过,通过则OK了.

win7系统无法打开“计算机”资源管理器调用失败怎么办

  最近每次打开页面就提示脚本运行错误的问题,于是就去删除了所有包含firefox的文件,再重装好浏览器,同时安装好Abode Flash,问题得到了解决.不过在这之后,小编却遇到了另外一个问题,要打开win7系统桌面的"计算机"(在xp中叫"我的电脑",也就是通常说的资源管理器)时,提示"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}系统调用失败".资源管理器调用失败,带不开"计算机"了.

调用失败-调用银行接口失败怎么办?

问题描述 调用银行接口失败怎么办? 根据银行的API文档,构建URL ,发送请求来调用银行接口,如果调用失败怎么办? 用事务回滚吗? 解决方案 因为只要银行那边支付成功了,就会返回一串POST变量,你只需要对它进行解析就行了. 也就是说只要银行那边OK了,你就没有问题.至于你怎么设置通过返回的POST变量来进行判断是否成功就是你这边的事情了. 如果银行那边不OK,你也不会受到成功的POST变量,会返回一个错误的POST变量给你. 具体情况就要看银行的API手册了.推荐就使用第三方支付. 解决方案

dll调用-PB 调用DLL 返回值为乱码

问题描述 PB 调用DLL 返回值为乱码 PB 使用SMS.DLL在PB中调用时,发现返回值为乱码. 推测异常原因可能是: DLL中定义的数据类型与PB数据类型不同造成. 使用DELPHI调用相同的DLL,返回值正常. //DLL声明 function uint Sms_Connection(string CopyRight,uint Com_Port,uint Com_BaudRate,ref string Mobile_Type,ref string CopyRightToCOM)libra