我的程序生成的.exe设成开机自动运行的,但是重启电脑之后就不会自动运行了,
但是注册表里存在啊。哪位高手指点我哪里设置出了问题?

解决方案 »

  1.   

    BOOL CPageGeneral::SetAutoRun(BOOL bAuto)
    {
    CString strPath;
    CString strRegName; 
        GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); 
        strPath.ReleaseBuffer(); 
        HKEY hRegKey; 
    //    BOOL bResult; 
        strRegName=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); 

        if (RegOpenKey(HKEY_LOCAL_MACHINE, strRegName, &hRegKey) != ERROR_SUCCESS)  
    {
            return FALSE; 
    }    strRegName.LoadString( AFX_IDS_APP_TITLE ); if (bAuto)
    {
    if (::RegSetValueEx( hRegKey,strRegName,0,REG_SZ,(CONST BYTE *)strPath.GetBuffer(0),strPath.GetLength()*2)!=ERROR_SUCCESS) 
    {
    strPath.ReleaseBuffer(); 
    return FALSE; 
    }
            else 
    {
    strPath.ReleaseBuffer();
                return TRUE; 
    }
    }
    else
    {
    ::RegDeleteValue(hRegKey,strRegName);  
    return TRUE;
    }
    //       _wsplitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL); }
      

  2.   

    BOOL SetAutoRun(BOOL bAutoRun)
    {
    const char* AUTO_RUN_VALUE_NAME = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
            CString strPath;
            ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH+1),MAX_PATH);
            strPath.ReleaseBuffer();
            HKEY hRegKey;
            BOOL bResult;
            if(RegOpenKey(HKEY_LOCAL_MACHINE, AUTO_RUN_KEY, &hRegKey) != ERROR_SUCCESS)
                    bResult=FALSE;
            else
            {
                    if (bAutoRun)
                    {
                            if(::RegSetValueEx(hRegKey,AUTO_RUN_VALUE_NAME,0,REG_SZ,(CONST BYTE *)strPath.GetBuffer(), strPath.GetLength()*sizeof(TCHAR)) == ERROR_SUCCESS)
                                    bResult = TRUE;
                            else
                                    bResult = FALSE;
                    }
                    else
                    {
                            if (::RegDeleteValue(hRegKey,AUTO_RUN_VALUE_NAME) == ERROR_SUCCESS)
                                    bResult = TRUE;
                            else
                                    bResult = FALSE;
                    }                strPath.ReleaseBuffer();
                    ::RegCloseKey(hRegKey);
            }
            return bResult;
    }
      

  3.   

    感谢各位高手的指教!
    下面是我的源码,我要写一个看门狗的程序,在测试中发现了上述的问题,小弟不知道问题出在了那里,请高手过目,指点迷津。
    void CWatchdogDlg::AddAutoRunToReg() 
    {
    //open reg 
      HKEY hKEY;
      HKEY hKEYResult;
    long res; 
    DWORD dwRes;
     
    hKEY = HKEY_LOCAL_MACHINE;
      res=::RegOpenKeyEx(hKEY,"SOFTWARE\\NorcoWD",0,KEY_ALL_ACCESS,&hKEYResult);
      if(res!=ERROR_SUCCESS) 
      { 
    res=::RegCreateKeyEx(hKEY,"SOFTWARE\\NorcoWD",// 子键
                        0,                          // 必须为0
                     NULL,                       // 键的class
                     REG_OPTION_NON_VOLATILE,   // 永久保持
                       KEY_READ|KEY_WRITE,         // 访问权限
                       NULL,                      // 安全属性
                       &hKEYResult,              // 保存打开的键的句柄
                       NULL); 
      if(res!=ERROR_SUCCESS)
    {
    AfxMessageBox("Creat&Open registry failed!");
    return;
    }
        }   
       RegSetValueEx(hKEYResult,"SuperIO",
    0,             // 必须为0
    REG_DWORD,    // 键类型
    (CONST BYTE*)&dwRes, // 需存储的数据
    sizeof(DWORD)); // 数据长度//=======================
    DWORD datatype=REG_SZ; 
    unsigned char szvalue[_MAX_PATH];
    // strcpy((char*)szvalue,"C:\\WD3330.exe");
    strcpy((char*)szvalue,CString (GetCommandLine()));

    res =::RegOpenKeyEx(hKEY,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
    0,
    KEY_ALL_ACCESS, 
    &hKEYResult);  if(res!=ERROR_SUCCESS)
    {
    AfxMessageBox("Open registry failed!");
    return;
    } if(IsDlgButtonChecked(IDC_CHECK2)) //检测是否要在注册表加入到自动启动
    { //是,加入到自动启动
    res = ::RegSetValueEx(hKEYResult, "NorcoWatchDog", 0, datatype,                    szvalue, strlen(LPCSTR(szvalue))); 
    if(res==ERROR_SUCCESS)AfxMessageBox("Auro-run added!");//已添加自启动
    else ::AfxMessageBox("Add auto-run failed!");//添加自启动失败!
    }
    else //否,删除自启动
    {
    res = ::RegDeleteValue(hKEYResult,"NorcoWatchDog"); //
    if(res==ERROR_SUCCESS)AfxMessageBox("Auto-run cleared!");//自动启动已清除
    else AfxMessageBox("Auto-run clear failed!");//清除自动启动失败! res = ::RegDeleteKey(hKEY,"SOFTWARE\\NorcoWD");
    if(res==ERROR_SUCCESS)AfxMessageBox("Configer-data cleared!");
    else AfxMessageBox("Configer-data clear failed! ");
    }
    RegCloseKey(hKEYResult);
      }
      

  4.   

    监测注册表启动的文件夹和你程序存放的文件一样吗?
    如果一样,你可以设置注册表调一个别人写的程序试试。
    我之前写到这
    lRetCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL, REG_OPTION_NON_VOLATILE,
    KEY_WRITE,NULL,&hKey1,&dwDisposition);
      

  5.   

    关注中
    不知楼主的问题解决了没有
    ——————————————————————————
    JOYZML(菜鸟朱铭雷)