自毁应用

沿着“这盘磁带将在五秒钟内自毁。祝你好运,吉姆“...

一旦达到预设的使用时间或其他条件,应用程序是否有可能删除自身(或其可执行包装形式)?

或者,还可以使用哪些其他方法来使应用程序无用?

这里的目的是让测试版过期,邀请用户获得更新的版本。


答案 1

这是可能的。为了绕过 JAR 文件的锁定,您的应用程序可能需要生成一个后台进程,该进程在 JVM 退出后再删除内容。

但是,这不是防弹的。有人可以安装应用程序,然后将已安装的文件和目录设为只读,以便您的应用程序无法自行删除。用户(或其管理员)通过操作系统的访问控制系统对创建和删除哪些文件拥有最终决定权。


答案 2

如果您控制测试人员下载应用程序的位置,则可以使用自动构建系统(例如Jenkins),该系统可以每晚创建一个具有硬编码到期日期的新测试版:

private static final Date EXPIRY_DATE = <90 days in the future from build date>;

上述日期由构建过程自动插入

if (EXPIRY_DATE.before(new Date()) {
    System.out.println("Get a new beta version, please");
    System.exit(1);
}

将其与签名和密封的jar混合在一起,以在反编译字节码和提供不包含该代码的替代实现方面设置障碍,您可以分发代码的过期测试版。

可以将自动构建系统配置为自动将 beta 版本上传到托管下载版本的服务器。


推荐