Along the lines of "This tape will self-destruct in five seconds. Good luck, Jim"...
Would it be possible for an application to delete itself (or it's executable wrapper form) once a preset time of use or other condition has been reached?
Alternatively, what other approaches could be used to make the application useless?
The aim here is to have a beta expire, inviting users to get a more up-to-date version.
It is possible. To get around the lock on the JAR file, your application may need to spawn a background process that waits until the JVM has exited before deleting stuff.
However, this isn't bomb-proof. Someone could install the application and then make the installed files and directories read-only so that your application can't delete itself. The user (or their administrator) via the OS'es access control system has the final say on what files are created and deleted.
it is pretty possible i guess. maybe you can delete the jar like this and make sure the application vanishes given that you have the rights.
also using something like Nullsoft Scriptable Install System which enables you to write your own installed/uninstaller should help.
Since Windows locks the
JAR
file while it is running, you cannot delete it from your own Java code hence you need aBatch
file:ProgramDirectoryUtilities
class:Solution inspired by this question.
Here is a better method for Windows:
Here is the original answer.
If you control where testers download your application, you could use an automated build system (e.g. Jenkins) that you could create a new beta versions every night that has a hard-coded expiry date:
the above date is automatically inserted by the build process
Mix that with signed and sealed jars, to put obstacles in the way of decompiling the bytecode and providing an alternative implementation that doesn't include that code, you can hand out a time-expiring beta of the code.
The automated build system could be configured to automatically upload the beta version to the server hosting the download version.