近日用VC写的一程序,需要调用一批处理文件,于是我在程序中写入了如下语句:
ShellExecute(NULL,"open",Path,"","",SW_HIDE); //Path为CString变量,储存有批处理所在的路径
将release的程序右键以管理员身份运行,结果批处理文件执行失败
手工以管理员身份运行批处理,批处理执行成功
这是为什么呢?请各位指点PS:批处理的作用是对BCD的启动项进行操作 

解决方案 »

  1.   

    首先 对系统本身的 BCD文件进行操作是必须有管理员权限的。给工程嵌入manifest文件,给与requireAdministrator参数,启动时就会出现UAC提示
    你可以google一下。
      

  2.   

    还有 这是网上找来的方法 用 ShellExecuteEx#include <stdio.h>
    #include<windows.h>
    #include<tchar.h>int _tmain(int argc,TCHAR* argv[])
    {
    SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTEINFO)};
    sei.lpVerb=TEXT("runas");
    sei.lpFile=TEXT("cmd.exe");//add  application  which you want to run as administrator here
      sei.nShow=SW_SHOWNORMAL;//without this,the windows will be hiden
    if(!ShellExecuteEx(&sei)){
    DWORD dwStatus=GetLastError();
    if(dwStatus==ERROR_CANCELLED){
    printf("提升权限被用户拒绝\n");
    }
    else 
    if(dwStatus==ERROR_FILE_NOT_FOUND){
    printf("所要执行的文件没有找到\n");
    }
    }return 0;
    }