阿杰 发表于 2010-12-12 20:32:00

在Vista 或Win7 下以管理员身份运行程序

1、判断是否为管理员身份运行程序:
    在windows Vista Windows 7 下有一个 IsAPI可以判断当前应用程序是否以管理员身份运行,但在其它平台却没有这个API。
原型:
Public Declare Function IsUserAnAdmin Lib "shell32" () As Long
在其他平台下的变通方案,可以用下面的函数替代:
int IsUserAnAdmin()
{
   int bToken, bCheck;
   PSID pAdmin;
   SID_IDENTIFIER_AUTHORITY sAuthority = SECURITY_NT_AUTHORITY;
   
   HMODULE hAdvapi32 = LoadLibrary( "advapi32" );
   if( hAdvapi32 != NULL )
   {
         CheckTokenMembership = (CTM) GetProcAddress( hAdvapi32, "CheckTokenMembership" );   
         if( CheckTokenMembership != NULL )
         {
             bToken = AllocateAndInitializeSid( &sAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdmin );
             if( bToken == 1 )
             {
               bCheck = CheckTokenMembership( NULL, pAdmin, &bToken );
               if( bCheck == 0 ) {
                     bToken = 1;
               }
             }
         }
   }
   return( bToken );
}
2、如果您的应用程序必须以管理员身份运行。运行的时候弹出 UAC确认。可以添加一个资源。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
          manifestVersion="1.0">
<dependency>
    <dependentAssembly>
      <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
      />
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
            <requestedExecutionLevel
                level="requireAdministrator"
                uiAccess="false"/>
      </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

Tesla.Angela 发表于 2010-12-12 21:26:48

这个方法不错,学习了。

kk1025 发表于 2013-4-12 00:00:57

M. 了不起. 學習起來

tangptr@126.com 发表于 2016-2-10 03:32:06

加进app.config么。。。然后就无法启动了,下面有一堆消息提示找不到特性啥啥的
页: [1]
查看完整版本: 在Vista 或Win7 下以管理员身份运行程序