【问题标题】:Find out whether an application needs administrator privileges查明应用程序是否需要管理员权限
【发布时间】:2011-10-08 12:37:38
【问题描述】:

Windows 7 使用自动机制来检测应用程序是否需要提升的管理员权限。或者应用程序本身有一个清单。

有没有办法以编程方式找出指定的应用程序是否需要提升的管理员权限? 我不想启动它来发现它。

谢谢你;)。

【问题讨论】:

  • 请不要在标题前加上“C#”。在Stack Overflow,这就是我们使用标签的目的。
  • 好的,谢谢您的指正。我会在进一步的问题上记住这一点;)

标签: c# windows-7 uac


【解决方案1】:

实际上只有一种方法可以告诉 Windows 程序需要提升,那就是通过清单文件。清单文件可以嵌入到程序集 (exe/dll) 中,也可以存在于名为 <YOUR_APP>.exe.manifest 的单独文件中。这确实是唯一的方法,也可能是您可以安全检查的唯一方法。正式。

Windows 还包含一个用于应用程序兼容性的巨型数据库。如果微软已经测试了一个应用程序并发现它在操作系统升级发生时中断,他们有时会在数据库中创建一个条目来实质上破解该应用程序。有时他们会谎报当前的操作系统版本,有时他们会自动以管理员身份运行,有时他们会做很多其他事情。您可以使用Application Compatibility Toolkit 查看数据库。不知道有没有官方的方式可以通过代码查询数据库。 This blog post 谈到了博主制作但显然从未发布过的工具。

最后一个自动提升机制是尝试确定该应用程序是否是安装程序的算法。 According to MSDN这些属性被检查:

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

关键字和字节序列来源于common 从各种安装程序技术中观察到的特征。

最后,应用程序可以作为普通用户运行,但 spawn a child process that requires elevated privileges。我不知道是否真的有任何方法可以实际检测到对应用程序本身的反编译。

【讨论】:

  • 我要首先感谢您提供如此详细的回答!好的,我将实现最后陈述的算法并查找清单文件。它似乎涵盖了许多情况。非常感谢:)
猜你喜欢
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2021-09-22
相关资源
最近更新 更多