【发布时间】:2016-09-23 06:36:30
【问题描述】:
我有一个用于自动更新的非常简单的程序。它检查服务器上的可用版本 (HTTPS),下载新的更新并运行(可能更新的)程序。这是一个用Delphi 7编写的旧程序。在Windows 8和Windows 10下似乎这个程序需要提升(以管理员身份运行)。这是一个问题,因为一旦程序被提升,它也会启动更新的程序提升,这很糟糕。
程序代码很简单,它只包含来自服务器的Indy组件(TIdHTTP),以及用来执行他下载的程序的ShellAPI,一些IniFiles和一个进度条。
所以问题是:如何找出需要提升的 API 调用,以及如何替换它?是否有调试器可以判断哪个 API 调用(在哪个代码地址)需要提升?
【问题讨论】:
-
做一些调试并找出程序失败的地方。您可能想要添加应用清单,以便虚拟化不会干扰。你知道怎么调试吗?
-
当我将 exe 文件复制到 Windows 7 机器上时,它的图标会出现,其中包含管理员盾牌。我可以看到它在启动之前需要管理员权限。该程序无法以普通用户身份加载。所以我认为当我开始调试时,它已经被提升了。那我怎么知道是什么原因造成的呢?我不确定如何创建清单文件 - 从来没有这样做过。
-
哦,我也不知道怎么调试,尤其是在windows 7下。这是一个只使用win32 api的简单程序。我不认为我有 win 7/8/10 的调试工具。
-
可能与您的程序名称有关?检查stackoverflow.com/questions/31140051/…
-
添加清单将停止该特定的兼容 shim。您为什么不花一些时间从文档中了解这些问题。当您对这些问题知之甚少时,您确定要做出决定吗?当您信息不灵通时,您不会做出错误的决定吗?