我的程序生成的.exe设成开机自动运行的,但是重启电脑之后就不会自动运行了 我的程序生成的.exe设成开机自动运行的,但是重启电脑之后就不会自动运行了,但是注册表里存在啊。哪位高手指点我哪里设置出了问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } 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;} 感谢各位高手的指教!下面是我的源码,我要写一个看门狗的程序,在测试中发现了上述的问题,小弟不知道问题出在了那里,请高手过目,指点迷津。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); } 监测注册表启动的文件夹和你程序存放的文件一样吗?如果一样,你可以设置注册表调一个别人写的程序试试。我之前写到这lRetCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,NULL,&hKey1,&dwDisposition); 关注中不知楼主的问题解决了没有——————————————————————————JOYZML(菜鸟朱铭雷) 关于Windows7+Visual Studio 2010 MFC中RadioBox与int型变量绑定后如何接受RadioBox的点击消息? 请教:DLL导出类,如何在VC中调用,举个例子! 如何进行编码转换 求教 关于ODBC数据库的筛选函数! 求助关于smime(rfc2633)安全电子邮件协议 请问我想参与共享软件开发,那里有项目,各位能为我指条明路,谢谢! vs2008版本问题? Visual Stodio 6的sp5是不是有问题 MSSOAP的编译错误,请问怎么解决 请问新建的ATL项目,可不可以转换成COM+组件呢?
{
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); }
{
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;
}
下面是我的源码,我要写一个看门狗的程序,在测试中发现了上述的问题,小弟不知道问题出在了那里,请高手过目,指点迷津。
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);
}
如果一样,你可以设置注册表调一个别人写的程序试试。
我之前写到这
lRetCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE,NULL,&hKey1,&dwDisposition);
不知楼主的问题解决了没有
——————————————————————————
JOYZML(菜鸟朱铭雷)