win7下小弟我的requireAdministrator的程序为什么不能开机自启动

win7下我的requireAdministrator的程序为什么不能开机自启动?
我用vs2010编译了一个对话框程序ddd.exe(编译时在静态库中使用 MFC, 多字节, UAC EXCUTE LEVEL: requireAdministrator)
也就是这个程序是要求以administrator身份运行的

在win7 32bit下作测试:
我在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run手工建立了一个启动项:
nnn, 值为c:\mmm\ddd.exe

重启计算机, 用缺省管理员登录, ddd.ex e没有启动.(但用administrator用户登录可以启动). 

(如果编译时不选requireAdministrator, 则所有用户登录后,ddd.exe 都可以启动.)

但我必须用requireAdministrator.
怎么办?
------解决思路----------------------
可能是用户session的原因,这种情况,更适合把你的程序做成服务,这样任何用户登陆都会启动。而且权限也够
------解决思路----------------------
不应该在启动的时候就请求管理员权限。
建议的方法是把程序分割,需要管理员权限的分割出去,参考
Developing Applications that Run at Logon on Windows Vista
------解决思路----------------------
1、这是win7/win8的安全策略,为了安全考虑,禁止有管理员权限的程序在开机时自启动。我们可以用另外一个没有管理员权限的程序来启动我们的目标程序。
2、一般情况下,没有管理员权限的程序是无法启动具有管理员权限的程序,会提示没有操作权限。应该调用ShellExecuteEx API函数,传入RunAS参数,即可启动管理员权限的程序。注意对于Win7和XP要区别对待的,xp下不能使用runas参数的。
3、没有管理员权限的程序是可以开机自启动的。
相关代码如下:
	SHELLEXECUTEINFO si;
RtlZeroMemory( &si, sizeof( SHELLEXECUTEINFO ) );
si.cbSize = sizeof(SHELLEXECUTEINFO);
si.lpFile = szPath; // 目标程序路径
if ( IsOSWin7OrAbove() ) // win7及以上系统涉及到UAC权限,要以run as方式启动
{
si.lpVerb = _T("RunAs");
}
else // win7以下系统,则直接使用open打开
{
si.lpVerb = _T("open");
}

BOOL bRet = ShellExecuteEx( &si );