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

Sea*_*Sun 34 windows-7 uac

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

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

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

小智 22

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

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

长期修复是让 Crimson 编辑器开发人员更正他们的应用程序清单。他们应该在安装过程中将自己添加到 shell 上下文菜单中,或者至少告诉用户他们必须手动运行提升的应用程序(这很容易)而不是要求它。

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

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


小智 13

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

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

其中陈述如下:

安装程序检测仅适用于:

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

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

  • 文件名包括诸如“安装”、“设置”和“更新”之类的关键字。

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

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

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

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

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

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


小智 7

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

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

HTH

凯文