开机自启动设置在win7下失败,但工程文件开着运行就正常。该怎么处理
开机自启动设置在win7下失败,但工程文件开着运行就正常。
小弟自己写了个vc程序,vs2005+win7的环境,release版本生成后,其他功能都正常。但我加了个开机自启动的CheckBox。在xp下运行正常,但在win7上,只有当项目开着的时候运行正确,关闭项目再运行,checkbox显示总是不正确。
感觉很奇怪,看网上说可能UAC的问题,但我的程序没出发UAC啊。
请各位帮看看,问题在哪里?谢谢了。
------解决方案--------------------
是否运行的时候需要什么其他配置文件等...看返回的错误是什么
------解决方案--------------------
因为这两者执行这个程序的用户可能不一样?
------解决方案--------------------
调试运行和直接运行的权限是不一样的吧,你可以写log看看,是不是执行了,或者在写注册表的时候判断一下,MessageBox输出看看就比较清楚了
小弟自己写了个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输出看看就比较清楚了