注册表写入问题

love_lm 2009-11-10 10:43:02
vc对话框应用程序中要实现开机自动启动程序,我的源码如下但是总是在打开函数时提示打开失败 求解 急!!!
*我是在App类中的InitInstance()中调用这个函数的
bool SetReg()
{
#define MAX_REG 100
//获取执行文件的路径
char TempPath[MAX_REG];
CString string;
::GetModuleFileName(NULL,TempPath,MAX_REG);
string=TempPath;
int len=string.GetLength();
LPBYTE lpb=new BYTE[len];
for(int i=0;i<len;i++)
{
lpb[i]=TempPath[i];
}
lpb[i]=0;

HKEY hKEY;
char dataSet[255]="\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,dataSet,0,KEY_WRITE,&hKEY)!=ERROR_SUCCESS)
{
AfxMessageBox("打开注册表失败");
return FALSE;
}

if(RegSetValueEx(hKEY,_T("LANClient"),NULL,REG_SZ,lpb,len)!=ERROR_SUCCESS)
{
AfxMessageBox("写入数据失败");
return FALSE;
}
RegCloseKey(hKEY);
delete []lpb;
return TRUE;
}
...全文
137 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
love_lm 2009-11-11
  • 打赏
  • 举报
回复
呃··太低级的错误了 谢谢大家 我的分页不知道够不够20 不够也就这样了 呵呵 再次感谢
hongya6088 2009-11-11
  • 打赏
  • 举报
回复
HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭

//打开与路径 data_Set相关的hKEY
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion\\";
//访问注册表,hKEY则保存此函数所打开的键的句柄
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));
if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
{
AfxMessageBox("错误:无法打开有关的hKEY");
return;
}

//设置有关的数据
//CString_To_LPBYTE,请参考下面的函数
LPBYTE owner_Set=CString_To_LPBYTE(m_strOwner);//定义用户姓名 owner_Set
DWORD type_1=REG_SZ;//定义数据类型
DWORD cbData_1=m_strOwner.GetLength()+1;//定义数据长度

long ret1=::RegSetValueEx(hKEY,"RegisteredOwner",NULL,type_1,owner_Set,cbData_1);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息");
return;
}
phikaa 2009-11-11
  • 打赏
  • 举报
回复
还有,你那段char 转 BYTE的代码也比较搞,还用上循环了。。。呵呵
MSDN自己的例子里面都是强转的。。。
phikaa 2009-11-11
  • 打赏
  • 举报
回复
建议楼主不用这么麻烦,直接使用SHSetValue
phikaa 2009-11-11
  • 打赏
  • 举报
回复
char dataSet[255]="\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
============================================================================
char dataSet[255]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
yaozhiyong110 2009-11-11
  • 打赏
  • 举报
回复
char dataSet[255]="\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
改下 char dataSet[255]="Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 试试
djjs280 2009-11-11
  • 打赏
  • 举报
回复
3楼的意思是
AfxMessageBox("打开注册表失败"); 后面加一句
int nErrCode=GetLastError();
看看nErrCode的值是什么

根据这个值来排除故障
love_lm 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangjia184 的回复:]
GetLastError 是不是 Access Deny的错误? 
[/Quote]什么意思啊
CodeProject-Jerry 2009-11-10
  • 打赏
  • 举报
回复
GetLastError 是不是 Access Deny的错误?
love_lm 2009-11-10
  • 打赏
  • 举报
回复
装了个小红伞 但是同个程序的另外一个函数是读注册表的可以运行
MoXiaoRab 2009-11-10
  • 打赏
  • 举报
回复
你机器上有没有安全产品?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧