win7下,程序如何获取管理员权限,
我的程序在更新一个文件的时候出现异常,
后来在修改的时候 干脆 DeleteFile它,GetLastError的时候返回 5然后手动找到该文件,手动删除,系统就跳出一个提示框,
说必须有系统管理员权限菜能进行此操作,我点选ok之类的就可以删除,再声明一下,那不是系统文件,属于我们软件的文件怎么改变执行权限呢

解决方案 »

  1.   

    提权: static   BOOL   CUtility::EnableDebugPrivilege(BOOL   fEnable   =TRUE   )
    {   
    BOOL   fOK =   FALSE;   
    HANDLE hToken =   NULL;   
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
    {   
    TOKEN_PRIVILEGES tp;   
    tp.PrivilegeCount =1;   
    LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);   
    tp.Privileges[0].Attributes =   fEnable   ?   SE_PRIVILEGE_ENABLED   :   0;   
    AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);   
    fOK =   (GetLastError()==ERROR_SUCCESS);   
    CloseHandle(hToken);   
    }   
    return   fOK;   
    }
      

  2.   


    这位大哥啊,下班没,你提供的代码,在xp下true,win下就fail了,
    怎么改下啊
      

  3.   

    你程序本身右键-》run as administrator,看能删除
    Win7上有UAC限制,为了加强安全,需要提升.
      

  4.   

    试试这段代码
    以管理员身份重新打开进程
             TCHAR szApplication[MAX_PATH];
             DWORD cchLength = _countof(szApplication);
             QueryFullProcessImageName(
                GetCurrentProcess(), 0, szApplication, &cchLength);
             DWORD dwStatus = StartElevatedProcess(szApplication, NULL);
      

  5.   

    HANDLE hToken; 
       TOKEN_PRIVILEGES tkp; 
     
       // Get a token for this process. 
     
       if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
          return( FALSE ); 
     
       // Get the LUID for the shutdown privilege. 
     
       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
            &tkp.Privileges[0].Luid); 
     
       tkp.PrivilegeCount = 1;  // one privilege to set    
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
     
       // Get the shutdown privilege for this process. 
     
       AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
            (PTOKEN_PRIVILEGES)NULL, 0); 
     
       if (GetLastError() != ERROR_SUCCESS) 
          return FALSE; 
      

  6.   

    我遇到一个问题,不知道这种提权的方式能否解决我的问题:
    我的程序在win7下需要以管理员权限运行,因为要修改一些文件,所以在通过资源文件的方式加入了控制。但是程序以管理员权限启动时,老是弹出uac的提示框,一定要用户点击yes才能继续,很烦,有没有什么方式,可以不会弹出提示框,而直接以管理员方式启动的方法?