最近从 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,则可以执行以下操作:
HTH
凯文
| 归档时间: |
|
| 查看次数: |
31374 次 |
| 最近记录: |