我用下面两段代码分别获得可执行程序的路径和写入注册表,程序可以执行,但是却没有写进注册表,问题可能出在哪里啊,帮忙看看
void CStartUpProgDlg::OnGetfile() //获得可执行程序的路径
{
// TODO: Add your control notification handler code here
static char szFilter[]="(*.exe)|*.exe";
CFileDialog OpenFileDlg(
true,"*.tpe",NULL,OFN_HIDEREADONLY,szFilter);
if(OpenFileDlg.DoModal()==IDCANCEL)
return;
m_strFileName=OpenFileDlg.GetPathName();
SetDlgItemText(IDC_EDIT,LPCTSTR(m_strFileName));

}void CStartUpProgDlg::OnSetasstartupprog() //写入注册表
{
// TODO: Add your control notification handler code here
HKEY hKey;
CString sKeyName;
unsigned char szFilePath[100];
LONG lnRes=RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0L,
KEY_WRITE,
&hKey
);
lstrcpy((char*)szFilePath,LPCTSTR(m_strFileName));
if(ERROR_SUCCESS==lnRes)
{
lnRes=RegSetValueEx(hKey,
LPCTSTR(sKeyName),
0,
REG_SZ,
szFilePath,
REG_SZ);
if(ERROR_SUCCESS==lnRes)
AfxMessageBox("已经成功加载此应用程序!");
else
AfxMessageBox("不能加载此应用程序!");
}
else
{
AfxMessageBox("不能加载此应用程序!");
}
}

解决方案 »

  1.   

    SetRegistryKey(_T("..."));了吗?
      

  2.   

    在lnRes=RegSetValueEx(hKey,
    LPCTSTR(sKeyName),
    0,
    REG_SZ,
    szFilePath,
    REG_SZ);
    中,最后一个参数应为m_strFileName.GetLength()+1.
      

  3.   

    lnRes=RegSetValueEx(hKey,
    LPCTSTR(sKeyName), // 这个值没有初始化
    0,
    REG_SZ,
    szFilePath,
    REG_SZ);
      

  4.   

    写错了,应为strlen((char*)szFilePath)+1.
      

  5.   

    回答错了
    你是用api的写注册表,我没仔细看,以为是mfc的