DWORD dwerr;
HANDLE hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode;
dwerr = GetLastError();
cstrcode.Format("%ld",dwerr);

while ( hProcess )
{
TerminateProcess( hProcess,0 );
Sleep(100);
hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode2;
cstrcode2.Format("%ld",dwerr);
cstrcode +=(","+cstrcode2);
}
如上代码,用VC调试时,无论debug还是release都是正确的,
但是直接运行生成的exe程序,第一次就失败,错误码为5。
请问原因与解决方法

解决方案 »

  1.   

    错误5是拒绝访问楼主,提升权限啊。。你用WIN7?
      

  2.   

    不是win7,是XP,问题是调试的时候是好的
      

  3.   

    调试的时候你的进程是由IDE创建的,因为IDE是高权限,所以进程继承了高权限。而独立运行的时候就不同了,需要自己用代码提升权限。
    BOOL EnableDebugPrivilege() 

    HANDLE hToken; 
    BOOL fOk=FALSE; 
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)) 

    TOKEN_PRIVILEGES tp; 
    tp.PrivilegeCount=1; 
    if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid)) 
    printf("Can't lookup privilege value.\n"); 
    tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; 
    if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL)) 
    printf("Can't adjust privilege value.\n"); 
    fOk=(GetLastError()==ERROR_SUCCESS); 
    CloseHandle(hToken); 

    return fOk;