我最近从 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 修复程序来填充应用程序,这会强制应用程序使用标准用户令牌运行。
答案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,您可以执行以下操作:
- 以管理员身份打开 Visual Studio。
- 按 Ctrl-O 打开文件
- 浏览到 Crimson Editor 所在的文件夹并打开 cedt.exe
- 使用资源编辑器打开该文件,您将看到一棵树,其中有一个名为 RT_MANIFEST 的分支,展开它并双击名为“1 [English United States]”的单个子条目
- 在右栏的大约四分之三处,您将看到 requestedExecutionLevel level="highestAvailable",将“highestAvailable”更改为“asInvoker”(注意:编辑器默认以覆盖类型模式打开。
- 保存文件即可完成。
高血压
凯文
答案4
这里有一些关于启发式方法的信息: http://msdn.microsoft.com/en-us/library/aa905330.aspx
清单可以帮助控制其中一些事情。