asp.net C# WinForm判断Win7下是否是管理员身份运行

我们在 win7 下运行一些安装程序时,会发现首先弹出一个对话框,让用户确认是否同意允许这个程序改变你的计算机配置,但我们编写的应用程序默认是不会弹出这个提示的,也无法以管理员权限运行。本文介绍了 C# 程序如何设置来提示用户以管理员权限运行。

首先在项目中增加一个 Application Manifest File

 

 

默认的配置如下:

 代码如下 复制代码

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

我们可以看到这个配置中有一个 requestedExecutionLevel 项,这个项用于配置当前应用请求的执行权限级别。这个项有3个值可供选择,如下表所示:

 

Value Description Comment
asInvoker The application runs with the same access token as the parent process. Recommended for standard user applications. Do refractoring with internal elevation points, as per the guidance provided earlier in this document.
highestAvailable The application runs with the highest privileges the current user can obtain. Recommended for mixed-mode applications. Plan to refractor the application in a future release.
requireAdministrator The application runs only for administrators and requires that the application be launched with the full access token of an administrator. Recommended for administrator only applications. Internal elevation points are not needed. The application is already running elevated.

 

asInvoker : 如果选这个,应用程序就是以当前的权限运行。

highestAvailable: 这个是以当前用户可以获得的最高权限运行。

requireAdministrator: 这个是仅以系统管理员权限运行。

 

默认情况下是 asInvoker。

highestAvailable 和 requireAdministrator 这两个选项都可以提示用户获取系统管理员权限。那么这两个选项的区别在哪里呢?

他们的区别在于,如果我们不是以管理员帐号登录,那么如果应用程序设置为 requireAdministrator ,那么应用程序就直接运行失败,无法启动。而如果设置为 highestAvailable,则应用程序可以运行成功,但是是以当前帐号的权限运行而不是系统管理员权限运行。如果我们希望程序在非管理员帐号登录时也可以运行(这种情况下应该某些功能受限制) ,那么建议采用 highestAvailable 来配置。

关于requestedExecutionLevel 设置的权威文档请参考下面链接:

 代码如下 复制代码

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

 

配置文件修改后,我们运行应用程序,就会首先弹出这样一个提示框,点 Yes 后,程序才可以继续运行,并且获得系统管理员的权限。

 

 

下面再来看看程序如何知道当前运行在系统管理员权限还是非系统管理员权限:

 代码如下 复制代码
public static bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

复制代码这段代码可以用于判断当前程序是否运行在系统管理员权限下。如果配置为 asInvoker,在win7 下,这个函数会返回 false ,如果是 requireAdministrator  则返回 true。

 

 

时间: 2024-10-26 12:10:12

asp.net C# WinForm判断Win7下是否是管理员身份运行的相关文章

C# WinForm判断Win7下是否是管理员身份运行

原文:C# WinForm判断Win7下是否是管理员身份运行如果程序不是以管理员身份运行,操作本地文件会提示:System.UnauthorizedAccessException异常 Vista 和 Windows 7 操作系统为了加强安全,增加了 UAC(用户账户控制) 的机制,如果 UAC 被打开,用户即使是以管理员权限登录,其应用程序默认情况下也无法对系统目录,系统注册表等可能影响系统运行的设置进行写操作.这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC

Win7系统如何以管理员身份运行程序

  大家看Win7系统教程的时候经常会看见"以管理员身份运行",那么怎样才能以管理员身份运行运行Win7系统程序呢?下面系小编为大家介绍一下. 1.通常,我们一般采用直接在目标程序上点击鼠标右键打开菜单选择"以管理员身份运行"; 2.或者我们按下快捷键Ctrl+Shift,在用鼠标左键正常打开程序,也会是"以管理员身份运行"的效果; 那么,我们是否可以设置程序"默认以管理员身份运行"呢? 方法一:在程序本身设置 1.在程序上右

判断当前进程是否&quot;以管理员身份运行&quot;的

BOOL IsAdministrator() {//判断是否管理员模式 BOOL bIsElevated = FALSE; HANDLE hToken = NULL; UINT16 uWinVer = LOWORD(GetVersion()); uWinVer = MAKEWORD(HIBYTE(uWinVer),LOBYTE(uWinVer)); if (uWinVer < 0x0600))//不是VISTA.Windows7 return(FALSE); if (OpenProcessTok

win7如何设置以管理员身份运行

右键单击桌面"计算机",选择"管理" 在页面左侧,依此打开"计算机管理(本地)→ 系统工具→本地用户和组→用户",在右侧找到"Administrator",双击打开 在打开页面选择常规栏目,去掉"账户已禁用"前的"√",点击应用,确定

Win7下如何让程序始终以管理员身份运行

在Win7中,有些程序必须"以管理员身份运行"才能正常使用,一般情况下,在开启这类程序时,用鼠标右键点击程序图标,然后选择"以管理员身份运行"就可以了.虽然操作简单,但Win7中的程序那么多,难免有时会忘记.那么,如何能让程序在Win7下始终以管理员身份运行呢?方法其实很简单. 首先,同样用鼠标右键点击程序图标,然后选择"属性". 打开程序属性 切换到"兼容性"选项卡,勾选最下方的"以管理员身份运行".  

win7下让程序默认以管理员身份运行

在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1.首先创建一个名为manifest的文件并将下面的内容粘贴进去: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:sc

win7以管理员身份运行设置图解

在win7系统中增加了"以管理员身份运行"这个功能.原因是:为了系统安全,很多程序不让以administrator账户运行的,但这个又导致很多程序因为无法获得相关权限而无法运行,于是就出现了所谓的"兼容性问题",一般右键以管理员身份运行后,本来不能运行的程序就能运行了. 在 Windows 7 中,若要以管理员身份运行程序,通常会使用以下两种方法: 在程序或其快捷方式上右键鼠标,选择"以管理员身份运行". 使用快捷键"Ctrl"

win7右键菜单没有“以管理员身份运行”怎么解决

  win7右键菜单没有"以管理员身份运行"怎么解决           方法一: 1.通过计算机管理永久开启Administrator管理员账号登录; 2.右键桌面的"计算机" - 选择"管理";依次展开"计算机管理(本地) - 系统工具 - 本地用户和组 - 用户"; 3.在右边的文件里面找到"Administrator"并双击它,在"常规"选项下将"账户已禁用"

win7如何设置一直以管理员身份运行

在win7有些程序需要以管理员的身份才能运行,但是我们几乎天天都要运行这些程序,老是要手动选下很麻烦,怎么样设置才能这个程序以后运行都直接是以管理员的身份运行,不用在让我们去选择了,直接双击就能运行.这样我们在操作电脑的时候,就不会因为老是弹出这个而感觉非常麻烦.那么下面我就教你win7如何设置一直以管理员身份运行. 1 通过计算机管理永久开启Administrator管理员账号登录 右键桌面的"计算机" - 选择"管理";依次展开"计算机管理(本地) -