我有一个非常简单的程序,用于自动更新。它检查服务器上的可用版本(HTTPS),下载新更新并运行(可能更新的)程序。这是一个用Delphi 7编写的旧程序。看来这个程序需要在Windows 8和Windows 10下提升(以管理员身份运行)。这是一个问题,因为一旦程序升级,它也会启动更新的程序升级,这非常糟糕。
程序代码非常简单,它只包含来自服务器的Indy组件(TIdHTTP),而ShellAPI则执行他下载的程序,一些IniFiles和一个进度条。
所以问题是:如何找出需要提升的API调用,以及如何替换它?是否有调试器可以告诉哪些API调用(在什么代码地址处)需要提升?
答案 0 :(得分:11)
它不一定是需要提升的API调用。它可能只是程序名称。它可能被称为somethingUPDATE.exe
之类的东西吗?如果是这样,那么在没有UAC清单指定高程设置的情况下,Installer Detection将启动,Windows将认为该程序是安装程序并自动显示UAC提示以进行提升。
(包含Install
,Setup
,Patch
等文件名也是如此。
安装人员检测技术
安装程序是用于部署软件的应用程序,大多数都是写入系统目录和注册表项。这些受保护的系统位置通常只能由管理员用户写入,这意味着标准用户没有足够的权限来安装程序。 Windows Vista启发式检测安装程序并请求管理员凭据或管理员用户批准,以便以访问权限运行。 Windows Vista还会启发式检测更新程序和卸载程序。请注意,UAC的设计目标是防止在没有用户的知识和同意的情况下执行安装,因为它们写入文件系统和注册表的受保护区域。
安装程序检测仅适用于:
32位可执行文件
没有requestedExecutionLevel的应用程序
- 醇>
在启用LUA的情况下以标准用户身份运行的交互式进程
在创建32位进程之前,将检查以下属性以确定它是否为安装程序:
文件名包含"安装,"等关键字。 "设置," "更新,"等
以下版本控制资源字段中的关键字:供应商,公司名称,产品名称,文件描述,原始文件名,内部名称和导出名称。
可执行文件中嵌入的并排清单中的关键字。
可执行文件中链接的特定StringTable条目中的关键字。
可执行文件中链接的RC数据中的关键属性。
可执行文件中的目标字节序列。
注意
关键字和字节序列源自各种安装程序技术中观察到的共同特征。
此链接可能也很有趣:
答案 1 :(得分:3)
可能的原因是:
您的程序使用“setup”,“installer”,“updater”等词语命名.Windows正在.exe名称,版本和其他资源中查找这些内容。
您的程序会尝试写入HKLM或HKCR注册表配置单元或“Program Files”或“Windows \ System”文件夹。
对于Windows XP,建议不要写入提到的regstry配置单元和文件夹,但在Windows Vista之前不会真正强制执行。
您可以阅读有关User Account Control和关联文档的更多信息。