程序执行时的版本检查



我有一组python脚本,可能会与第三方用户共享。当它们被严格地在内部使用时,我们的员工使用了不推荐使用的脚本版本。我引入了以下版本检查,强制用户在发布更新时更新他们的脚本。

CURRENT_VERSION = "61022050"
def version_check():
    try:
        response = urllib2.urlopen(url)
        html = response.read()
        d = json.loads(html)
    except Exception: #Version Check Failed.
    if (d["version"] != CURRENT_VERSION):
        #Version Check Outdated.  Provide link to download.
    #Version Check Passed.

这种形式的版本检查工作得很好,但我被告知,在某些使用情况下,互联网访问将不可用,因此在这些情况下,这种形式的版本检查将自动失败。

是否有其他形式的版本检查不需要互联网使用,可以确保用户使用的是最新版本的脚本?我考虑过每周发布新版本,并在代码中硬编码日期,但更改系统日期并绕过它是非常容易的。

如果你真的认为每周写一次更新是可行的,那么日期的想法也不错。在商业软件的情况下,it经理通常有责任在第三方的情况下更新用户的软件,而不是软件的作者。

您可以使用datetime.datetime.now()time.time()设置软件最初运行的日期,然后将该变量作为二进制支持文件保存在用户的本地驱动器上(最好是不明显的地方)。然后在启动时检查参考文件,检查经过的时间,并检查日期是否倒退。

作为额外的支持层,您可以编写一个更新批处理脚本,IT经理可以在连接互联网的计算机上运行该脚本,该计算机会自动下载您的更新并将其分发给连接局域网的用户群。更新脚本甚至可以作为cron作业/调度任务运行,以便每周自动运行一次。

正如贾里德所说,一个足够绝望的人总是可以绕过你的最大努力。目标是让它变得足够复杂,足以破坏系统,用户不需要付出努力。

最新更新