Windows安装程序检测:什么是关键字的完整列表?

在微软的UAC网站以及一些现有的答案和文章(如这个 )中提到,安装程序Windows检测程序会检查程序集中的特定关键字,以检测应用程序是否为安装程序:

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

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

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

完整的列表可能是无意的,在所有版本的Windows上可能都不一样。 它也可能包括微软不想公开羞辱的独立软件开发商。

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

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

另一方面,如果你真的想触发检测,那么我认为你可以添加一个关键字到你的版本资源或字符串表…

可能最接近“关键字完整列表”的是在%windir%\AppPatch\sysmain.sdb读取垫片数据库本身。 (和可能在同一文件夹中的其他.sdb文件)。

sdb2xml实用程序似乎对解析它做了很好的工作。 我的Windows 7 x64系统上的sysmain.sdb的XML输出可以在这里找到。

一个有用的起点是在文件中搜索字符串“ GenericInstaller ”。 您会发现与文件名(“ *instal* ”,“ *setup* ”,“ trustedinstaller.exe ”等),校验和,文件版本信息字符串(“ InstallShield* ”,“ RTPatch Executable ”等)等各种属性。 它有时甚至认识到其他文件,如“EULA.rtf”的存在。

提取用于安装程序检测的文件名模式的完整列表有点不平凡,因为安装程序似乎有许多不同的分类(“GenericInstaller”,“SpecificInstaller”,“MozillaFirefoxSetup”等)。 但是我相信任何读到这里的人都可以通过挖掘XML来找到他们需要的信息。