如何避免用户帐户控制或在Win7中始终以管理模式运行windows应用程序

本文关键字:管理模式 运行 应用程序 windows Win7 用户 何避免 控制 | 更新日期: 2023-09-27 18:19:50

在WinForms应用程序中,当我的应用程序启动时,会出现"用户帐户控制"对话框(仅在Windows7中)。

有人能建议我如何在程序上避免这种情况吗?这就是我的应用程序应该始终以管理模式启动,或者有任何选项可以阻止这个对话框的出现吗?

我正在C#、VS2008中进行开发。

如何避免用户帐户控制或在Win7中始终以管理模式运行windows应用程序

如果不接受提示或告诉Windows始终以更高的权限启动应用程序,则无法自动启动具有更高权限的应用程序。能够通过程序改变这种行为将违背UAC的全部目的。如果UAC处于活动状态,并且应用程序执行的某些操作需要比当前用户更高的权限,则UAC会自动出现。作为管理员用户,并不能让你在没有事先确认的情况下做任何事情,这实际上只有在UAC处于活动状态时才能提升你的权限。

您应该做的是跟踪应用程序中实际触发UAC的内容,并删除或修改它,以便应用程序不需要更高的权限即可成功完成该任务。您还可以检查应用程序的清单是否请求更高的权限,在清单中检查requestedExecutionLevel。如果你确实需要更高的权限,你唯一的方法就是告诉用户关闭UAC,这仍然不意味着"普通"用户能够运行你的应用程序。或者在启动应用程序时始终接受提示。

如果您的目标是Windows Vista,并且您的应用程序需要管理员特权(例如访问程序文件目录),那么它将失败,除非您包含一个清单,以便Windows知道。幸运的是,它非常简单。

首先,将清单文件添加到.NET可执行项目的根目录中——您可以通过选择"添加新项"并选择"应用程序清单文件"来完成此操作。或者,只需创建一个名为"app.manifest"的空白文件。Visual Studio提供的标准模板如下所示:

<?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模式,默认情况下设置为"asInvoker"。这意味着该应用程序将在启动该应用程序的人的特权下运行——记住,在UAC下,即使是windows Vista上的管理员也会以用户身份运行,直到他们提升权限为止。

如果您的应用程序始终需要管理员权限,则可以将此值更改为"requireAdministrator"。现在,每当您的应用程序启动时,它总是会触发UAC并要求用户允许管理员访问您的程序。

请注意,值得认真考虑是否真的需要这样做,以及为什么要这样做——特别是考虑到UAC的侵入性体验。例如,您不需要将设置写入程序文件,因为Windows提供的用户配置文件区域和注册表正是用于此目的。一般来说,UAC应该迫使我们大家更加仔细地思考我们将数据存储在哪里,以及应用程序真正需要什么权限

您可以简单地通过编写两行代码来删除UAC提示,

点击此处

string UAC_key = @"HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'CurrentVersion'Policies'System";
Registry.SetValue(UAC_key, "EnableLUA", 0);`