防止不需要的应用程序提升(UAC)

防止不需要的应用程序提升(UAC)

我最近从 Vista 32 位迁移到 Windows 7 64 位,我的一个程序现在需要管理员权限。

我使用一个相当奇特的文本编辑器(Crimson Editor)。虽然它不是为 Vist/Win7 设计的,但它在 Vista 上工作得很好。但在 Windows 7 下,程序可执行文件会在其图标上添加这个 UAC 盾牌(即使兼容性选项卡中的“以管理员身份运行”标志是不是设置)并在我运行它时提示提升。

Win7 如何确定这个类似记事本的应用程序需要管理员权限?我该如何覆盖这个错误的启发式方法?

答案1

不,Crimson Editor 这样做的原因不是因为它未经签名。(这对 Win7 来说并不是什么新鲜事)。这是因为在编译时嵌入的应用程序清单指定了requestedPrivilegeLevel="highestLevel"

根据此论坛帖子,Crimson Editor 开发人员在修订版 237-241 中对此进行了更改。他们这样做是因为“将 Crimson Editor 添加到 shell 上下文菜单”功能需要管理员权限。

长期解决方案是让 Crimson Editor 开发人员更正其应用程序清单。他们应该在安装期间将自己添加到 shell 上下文菜单中,或者至少告诉用户他们必须手动以提升权限运行应用程序(这很容易做到),而不是强制要求这样做。

requestedPrivilegeLevel="highestLevel"对于清单中的所有应用(使用清单视图要查看应用程序清单),您可以使用 Microsoft 的应用程序兼容性工具包使用 RunAsInvoker 修复程序来填充应用程序,这会强制应用程序使用标准用户令牌运行。

有关如何使用应用程序兼容性工具包的更多信息,请参阅这个帖子将其应用于 Crimson Editor,或一般说明

答案2

我发现有两个应用程序有这个问题。一个文件名中有“update”,另一个在“FileDecsription”中有“update”。我只需从这两个应用程序中删除“update”一词,就不会再出现 UAC 警告。我在“UAC 的工作原理”-“安装程序检测”下找到了以下信息:

https://docs.microsoft.com/en-us/previous-versions/aa905330(v=msdn.10)

其中规定如下:

安装程序检测仅适用于:

  • 32 位可执行文件
  • 没有 requestedExecutionLevel 的应用程序
  • 以启用 UAC 的标准用户身份运行的交互式进程

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

  • 文件名包含“安装”、“设置”和“更新”等关键字。

  • 以下版本控制资源字段中的关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。

  • 可执行文件中嵌入的并行应用程序清单中的关键字。

  • 可执行文件中链接的特定 StringTable 条目中的关键字。

  • 可执行文件中链接的资源文件数据中的关键属性。

  • 可执行文件中的目标字节序列。

  • 注意:关键字和字节序列源自从各种安装程序技术观察到的共同特征。

答案3

如果您有 Visual Studio,您可以执行以下操作:

  1. 以管理员身份打开 Visual Studio。
  2. 按 Ctrl-O 打开文件
  3. 浏览到 Crimson Editor 所在的文件夹并打开 cedt.exe
  4. 使用资源编辑器打开该文件,您将看到一棵树,其中有一个名为 RT_MANIFEST 的分支,展开它并双击名为“1 [English United States]”的单个子条目
  5. 在右栏的大约四分之三处,您将看到 requestedExecutionLevel level="highestAvailable",将“highestAvailable”更改为“asInvoker”(注意:编辑器默认以覆盖类型模式打开。
  6. 保存文件即可完成。

高血压

凯文

答案4

这里有一些关于启发式方法的信息: http://msdn.microsoft.com/en-us/library/aa905330.aspx

清单可以帮助控制其中一些事情。

相关内容