在XP下用OpenProcess正常,在vista下返回错误
现采用如下代码(试图提升权限,该代码在OpenProcess之前运行),但依然无效OpenProcess返回错误 LUID luid;
LookupPrivilegeValue(NULL, "SeDebugPrivilege", &luid);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; HANDLE hProcessToken;
OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hProcessToken); AdjustTokenPrivileges(hProcessToken, FALSE, &tp, 0, NULL, NULL); CloseHandle(hProcessToken);
程序右键:Run As Administrator(以管理员身份运行) OpenProcess返回正常
使用MS TechNET的专门提升exe权限的插件运行也能通过
问题: 如何是程序在运行期间自动提升权限?
请回答简明扼要,针对性强!

解决方案 »

  1.   

    Shellexecute runas 指定管理员身份运行
      

  2.   

    TO:gyk120
    是在程序内部编码?
      

  3.   

    是的,你可以参考Windows Vista for Developers这篇文章
      

  4.   

    ::ShellExecute(0, // owner window
                   L"runas",
                   L"C:\\Windows\\Notepad.exe",
                   0, // params
                   0, // directory
                   SW_SHOWNORMAL);
      

  5.   

    TO:gyk120
    Kenny Kerr 's <<Windows Vista for Developers>> 的 session "Run as administrator" 已阅
    http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx不过我还是有些不明白,ShellExecute 的确可以保证exe已提权方式运行,但是这个代码放在应用程序哪里可以提升自身程序的权限呢?
    我只有一个程序,即程序启动后自动提升自己权限,而不是去新开另一个exe,如果把ShellExecute 放在程序初始化中,则必然进入一个死循环,反复不停的新开自己exe的进程。还请详细说明。ShellExecute Function  msdn参考
    http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
      

  6.   

    用.manifest里加上requireAdministrator描述不就好了?
      

  7.   

    解决方案:添加 manifest(资源)
     <?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <assemblyIdentity version="1.0.0.0"     processorArchitecture="x86"     name="XXX.exe.manifest"  //XXX应用程序名     type="win32"/>  <description>Description of your application</description>  <!-- Identify the application security requirements. -->  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">    <security>      <requestedPrivileges>        <requestedExecutionLevel          level="requireAdministrator"          uiAccess="false"/>        </requestedPrivileges>       </security>  </trustInfo></assembly>参考:
    Vista UAC中把应用程序标注为“需要管理员权限”的四种方法 
    http://www.cnblogs.com/taoxu0903/archive/2007/09/07/885588.html
    如何在 Visual Studio 2005 中可执行文件中嵌入清单文件
    http://support.microsoft.com/kb/944276/zh-cn