我有一组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作业/调度任务运行,以便每周自动运行一次。
正如贾里德所说,一个足够绝望的人总是可以绕过你的最大努力。目标是让它变得足够复杂,足以破坏系统,用户不需要付出努力。