开机自启动设置在win7下失败,但工程文件开着运行就正常。该怎么处理

开机自启动设置在win7下失败,但工程文件开着运行就正常。
小弟自己写了个vc程序,vs2005+win7的环境,release版本生成后,其他功能都正常。但我加了个开机自启动的CheckBox。在xp下运行正常,但在win7上,只有当项目开着的时候运行正确,关闭项目再运行,checkbox显示总是不正确。
C/C++ code

void CProp1::OnOK()
{
    // TODO: 在此添加专用代码和/或调用基类
    UpdateData(true);
    //...省略部分代码

    TCHAR path[_MAX_PATH];
    DWORD plen = _MAX_PATH;
    ::GetCurrentDirectory(plen,path);
    CString strname;
    strname.Format(_T("%s\\Googlehelper.exe"),path);

    if (m_bCheckRunSelf == TRUE)
    {
        m_rkey.Open(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"));
        m_rkey.SetStringValue(_T("Googelhelper"),strname);
        m_rkey.Close();
    }
    else
    {
        m_rkey.Open(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"));
        m_rkey.DeleteValue(_T("Googelhelper"));
        m_rkey.Close();
    }
    
    CPropertyPage::OnOK();
}

BOOL CProp1::OnInitDialog()
{
    CPropertyPage::OnInitDialog();

    // TODO:  在此添加额外的初始化
        //...省略部分代码

    TCHAR path[_MAX_PATH];
    DWORD plen = _MAX_PATH;
    ::GetCurrentDirectory(plen,path);
    CString strname;
    strname.Format(_T("%s\\Googlehelper.exe"),path);

    iret = m_rkey.Open(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"));
    if (ERROR_SUCCESS == iret)
    {
        TCHAR s[_MAX_PATH];
        DWORD len = _MAX_PATH;
        if (m_rkey.QueryStringValue(_T("Googelhelper"),s,&len) == ERROR_SUCCESS)
        {
            m_bCheckRunSelf = TRUE;
        }
    }
    m_rkey.Close();

    UpdateData(false);
    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}



感觉很奇怪,看网上说可能UAC的问题,但我的程序没出发UAC啊。
请各位帮看看,问题在哪里?谢谢了。

------解决方案--------------------
是否运行的时候需要什么其他配置文件等...看返回的错误是什么
------解决方案--------------------
因为这两者执行这个程序的用户可能不一样?
探讨
那应该怎么办呢?为什么当我在调试运行时又能呢?

------解决方案--------------------
调试运行和直接运行的权限是不一样的吧,你可以写log看看,是不是执行了,或者在写注册表的时候判断一下,MessageBox输出看看就比较清楚了