【问题标题】:Windows Installer Detection: What's the full list of keywords?Windows 安装程序检测:关键字的完整列表是什么?
【发布时间】:2015-03-30 03:50:29
【问题描述】:

On Microsoft's website about UAC 和一些现有的答案和文章(如this one)提到,Windows 的安装程序检测会检查程序集的某些关键字以检测应用程序是否是安装程序:

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

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

但是,我找不到这些关键字的完整列表。甚至在微软的网站上也只提到了“安装”、“设置”、“更新”等。那么“其他”是什么?

【问题讨论】:

  • 你为什么在乎?您只是好奇还是需要避免被发现?
  • 我玩过 ClickOnce,想实现codeproject.com/Articles/506162/… 中描述的解决方案,以便在卸载时执行自定义任务。
  • ...(例如删除注册表项等)。该解决方案建议创建一个自定义卸载程序-exe,然后启动实际的 ClickOnce 卸载程序。问题:如果您将自定义卸载程序命名为“uninstall.exe”,Windows 将显示消息“应用程序卸载正确吗?” (或类似的)因为自定义的 uninstall.exe 本身并没有真正完成卸载。
  • 刚刚被这个咬过,我觉得想知道是很有道理的。我正在编写一个名称中包含“patch”一词的程序,并且在将其编译为 32 位时试图理解为什么它需要提升。顺便说一句,“补丁”是列表中的另一个词。

标签: windows installation uac


【解决方案1】:

完整列表可能是故意未记录的,并且可能在所有版本的 Windows 上都不相同。它还可能包括 Microsoft 不想公开羞辱的 ISV。

正如 MSDN 所说,文件名不是唯一的触发器,我知道 NSIS 安装程序是根据字节签名检测到的。

处理此问题的正确方法是确保您的安装程序与 Vista/UAC 兼容,并在清单中添加一个 requestedExecutionLevel 节点。

另一方面,如果您确实想触发检测,那么我假设您可以在版本资源或字符串表中添加关键字...

【讨论】:

    【解决方案2】:

    您可能会找到最接近“完整关键字列表”的方法是在 %windir%\AppPatch\sysmain.sdb 上阅读 shim 数据库本身。 (可能还有同一文件夹中的其他 .sdb 文件)。

    sdb2xml 实用程序似乎在解析它方面做得很好。在我的 Windows 7 x64 系统上 sysmain.sdb 的 XML 输出可以在 here 找到。

    一个有用的起点是在文件中搜索字符串“GenericInstaller”。您会发现 <exe> 配置文件与文件名(“*instal*”、“*setup*”、“trustedinstaller.exe”等)、校验和、文件版本信息字符串(“InstallShield*”、“@987654331 @"等)和其他各种属性。它有时甚至可以识别其他文件的存在,例如“EULA.rtf”。

    提取用于安装程序检测的文件名模式的完整列表有点不重要,因为安装程序似乎有许多不同的分类(“GenericInstaller”、“SpecificInstaller”、“MozillaFirefoxSetup”等)。但我敢肯定,读到这里的任何人都能够通过深入研究 XML 找到他们需要的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 2022-01-07
      • 1970-01-01
      • 2023-04-07
      • 2013-06-03
      • 2018-08-16
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多