如何告诉 Windows 7 应用程序不需要以管理员权限运行?

use*_*141 8 windows-7 windows-vista elevation uac

可能的重复:
防止不需要的应用程序提升 (UAC)

我正在使用在 Windows Vista/Windows 7 之前编写的应用程序。Windows 已决定该应用程序需要以管理员身份运行(即,它具有盾牌图标)。我很确定该应用程序的清单中没有任何内容表明它需要以提升的权限运行(它是在 Windows Vista 之前编写的)。

有什么方法可以告诉 Windows 特定应用程序不需要提升权限?

bk1*_*k1e 14

Windows 根据各种标准自动提升应用程序(在了解和配置 Windows Vista 中的用户帐户控制中列出):

在创建 32 位进程之前,会检查以下属性以确定它是否为安装程序:

  • 文件名包括“安装”、“设置”、“更新”等关键字。
  • 以下版本控制资源字段中的关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。
  • 嵌入在可执行文件中的并行清单中的关键字。
  • 可执行文件中链接的特定 StringTable 条目中的关键字。
  • 可执行文件中链接的 RC 数据中的关键属性。
  • 可执行文件中的目标字节序列。

如果您不能通过重命名文件来阻止提升,则您应该能够创建一个清单来阻止提升

  • 基于关键字的自动提升是病态的! (5认同)

Ian*_*oyd 9

假设程序编写正确,并且在以标准用户身份运行时实际上可以运行,您可以将其显示为以标准用户身份运行。

注意:如果该程序在 Windows XP 上不起作用,它在 Windows Vista 或 Windows 7 上将继续失败。您可以通过登录 Windows XP 并查看它是否有效来测试此应用程序。(您确实以标准用户身份登录 Windows XP,对吗?)

如果程序无法以标准用户身份在 Windows XP 上正确运行,那么它将无法以标准用户身份在 Windows 7 上运行。如果您必须在 Windows XP 上以管理员身份运行该程序,则必须在 Windows 7 上以管理员身份运行该程序。

如果您对程序不需要以管理员身份运行感到满意,您可以添加一个清单指令 Windows,它应该以您的标准用户身份运行。

在与您的应用程序相同的文件夹中创建清单文件。例如,Goldwave.exe您创建:

Goldwave.exe.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="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)

注意:这是所谓的外部清单,因为它位于一个单独的文件中。应用程序完全有可能已经一个清单。

清单是在 Windows 2000 中引入的,作为声明对某些 DLL 版本的依赖关系的一种方式。该清单的一个常见用途是与 Windows XP 一起出现的,用于程序声明它们对版本 6的依赖comctl32.dll——以便应用程序成为“主题”。

如果应用程序已经有一个嵌入式清单,Windows 将忽略任何外部清单。在这种情况下,您需要使用Resource Hacker来修改嵌入的RT_MANIFEST(资源类型 24)清单。


您可以做的下一件事是检查注册表以查看是否有人已经将提升垫片应用于您的程序。加载 Regedit 并检查:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
    \Layers
Run Code Online (Sandbox Code Playgroud)

在那里,您可能会发现列出了大量程序,并带有以空格分隔的垫片:

  • C:\Program Files (x86)\ACDSee32\ACDSee32.exe HIGHDPIAWARE
  • C:\Program Files (x86)\Google\Picasa3\Picasa3.exe ELEVATECREATEPROCESS
  • C:\Program Files (x86)\skiStunt\skiStunt\bin\skiStunt.exe WINXPSP2
  • C:\Program Files (x86)\Steam\Steam.exe HIGHDPIAWARE ELEVATECREATEPROCESS
  • C:\Program Files (x86)\SysInternals\autoruns.exe ELEVATECREATEPROCESS RUNASADMIN
  • C:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe VISTASP2
  • D:\游戏\使命召唤\CoDSP.exe WINXPSP3
  • D:\Shared\Win32app\Spy\SPYXX.EXE DISABLEDWM

检查您的程序是否在那里。您还可以在以下位置找到一组类似的条目(“所有用户”的条目):

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers
Run Code Online (Sandbox Code Playgroud)