繁体   English   中英

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

[英]How to Avoid User Account Control or Run windows application in Win7 always in Admin mode

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

任何人都可以建议我如何以编程方式避免这种情况 - 这是我的应用程序应该始终在管理模式下启动,还是有任何选项可以阻止此对话框的到来?

我正在开发C#,VS2008。

如果不接受提示或告诉Windows始终以更高的权限启动该应用程序,则无法自动启动具有更高权限的应用程序。 能够以编程方式改变这种行为会破坏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的侵入性体验。 例如,您不需要将设置写入Program Files,因为Windows仅为此目的提供了用户配置文件区域和注册表。 总的来说,UAC应该强迫我们所有人更仔细地思考我们存储数据的位置,以及应用程序真正需要的权限。

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

点击这里

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM