注册表设置开机启动程序无效 我在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WOND”写入一个名称是“默认”、类型为“REG_SZ”、数据为“E:\WOND\Release\WOND.exe”,但是开机后没有自动运行这个程序,这是怎么回事啊?请高手指点,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的本意是要在“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!")); } } RegSetValue 这个函数就是这样的你的情况应该用 RegSetValueEx ///开机启动 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") ); } } 仅供参考 64位操作系统和32位操作系统的启动注册表位置不同地。当初我也被整惨了。long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE|KEY_WOW64_64KEY, &hKey);注意用KEY_WOW64_64KEY HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\ VC++新手,,现在想动态创建一个静态文本,怎么获取它的父指针?我用的是基于对话框的工程。 一个进程 怎样利用多核心CPU VC怎么访问Access数据库? 用API把一個TEXT文件(太大了)中的前面內容刪了,保留後面的方件? 装过vb6后再装vc6,就示有潜在的版本冲突.为什么? vc开发控件的问题!!! 我觉得真的要把ADO学透的话,一定要一本好书,你可以给我介绍一本吗?! 关于在vc程序中,调用ShellExecute来用ie打开网页的问题! 一个调用问题 如何有CSTOCKET的send传送非字符传 注册表设置开机启动程序无效 模拟程序点击的问题:调用的程序只有一个panel
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!"));
}
}
你的情况应该用 RegSetValueEx
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") );
}
} 仅供参考
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE|KEY_WOW64_64KEY, &hKey);注意用KEY_WOW64_64KEY