我在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WOND”写入一个名称是“默认”、类型为“REG_SZ”、数据为“E:\WOND\Release\WOND.exe”,但是开机后没有自动运行这个程序,这是怎么回事啊?请高手指点,谢谢!

解决方案 »

  1.   

    我的本意是要在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”写入一个名称是“WOND”、类型为“REG_SZ”、数据为“E:\WOND\Release\WOND.exe”的字符串值。可是用下面的代码却变成是在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”下添加一个项“WOND”,这是怎么回事? TCHAR szBuffer[MAX_PATH];
    DWORD dwRet =::GetModuleFileName(NULL, szBuffer, MAX_PATH);
    CString strPath = szBuffer;//本程序文件路径 CString strDir = MyDirFileOper::GetAppPath();//本程序目录 CString sName = _T("WOND"); //写入注册表,开机自启动
    HKEY hKey;
    //找到系统的启动项
    LPCTSTR lpRun = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
    //打开启动项Key
    long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);
    if(lRet == ERROR_SUCCESS)
    {
    //char pFileName[MAX_PATH] = {0};
    ////得到程序自身的全路径
    //DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);
    //添加一个子Key,并设置值 // 下面的“getip”是应用程序名字(不加后缀.exe)
     
    lRet = RegSetValue/*Ex*/(hKey,sName,/* 0, */REG_SZ, strPath/*(BYTE *)pFileName*/,dwRet);
     
    //关闭注册表
    RegCloseKey(hKey);
    if(lRet != ERROR_SUCCESS)
    {
    AfxMessageBox(_T("Auto Run Program setting failed!"));
    }
    }
      

  2.   

    RegSetValue 这个函数就是这样的
    你的情况应该用 RegSetValueEx
      

  3.   

     ///开机启动   
        if(m_bAutoRun)  
        {  
            if (ERROR_SUCCESS!=RegOpenKeyEx( HKEY_LOCAL_MACHINE,  
    _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\"),  
                0,  
                KEY_WRITE,  
                &hkey  
                )  
                )  

            {  

                AfxMessageBox("程序注册失败!");      
            }  
            else       
            {  
                RegSetValueEx( hkey,  
                    _T("GYCTEST"),  
                    0,  
                    REG_SZ,  
                    (CONST BYTE *)lpPath,  
                    cbData);  
            }  
            RegCloseKey(hkey);  
        }  
        //取消开机启动   
        else  
        {  
            if (ERROR_SUCCESS!=RegOpenKeyEx( HKEY_LOCAL_MACHINE,  
     _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\"),  
    0,  
    KEY_WRITE,  
    &hkey
    )  
    )  
            {  
                AfxMessageBox("程序注册失败!");  
            }  
            else  
            {  
                RegDeleteValue(     hkey,  
                    _T("GYCTEST") ); 
            }  
        }  仅供参考
      

  4.   

    64位操作系统和32位操作系统的启动注册表位置不同地。当初我也被整惨了。
    long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE|KEY_WOW64_64KEY, &hKey);注意用KEY_WOW64_64KEY
      

  5.   

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\