「このテープは 5 秒で自己破壊します。頑張ってください、ジム」 ...
あらかじめ設定された使用時間またはその他の条件に達すると、アプリケーション自体 (または実行可能なラッパー フォーム) を削除することは可能でしょうか?
または、アプリケーションを役に立たなくするために使用できる他のアプローチは何ですか?
ここでの目的は、ベータ版を期限切れにして、ユーザーに最新バージョンを入手してもらうことです。
「このテープは 5 秒で自己破壊します。頑張ってください、ジム」 ...
あらかじめ設定された使用時間またはその他の条件に達すると、アプリケーション自体 (または実行可能なラッパー フォーム) を削除することは可能でしょうか?
または、アプリケーションを役に立たなくするために使用できる他のアプローチは何ですか?
ここでの目的は、ベータ版を期限切れにして、ユーザーに最新バージョンを入手してもらうことです。
可能です。JAR ファイルのロックを回避するために、アプリケーションは、JVM が終了するまで待ってからファイルを削除するバックグラウンド プロセスを生成する必要がある場合があります。
ただし、これは防爆ではありません。誰かがアプリケーションをインストールし、インストールされたファイルとディレクトリを読み取り専用にして、アプリケーションがそれ自体を削除できないようにする可能性があります。OS のアクセス制御システムを介したユーザー (またはその管理者) は、どのファイルを作成および削除するかについて最終決定権を持ちます。
テスターがアプリケーションをダウンロードする場所を制御する場合は、自動ビルド システム ( 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と組み合わせて、バイトコードを逆コンパイルし、そのコードを含まない代替実装を提供する方法に障害を置き、期限切れのコードのベータ版を配布できます。
自動ビルド システムは、ダウンロード バージョンをホストするサーバーにベータ バージョンを自動的にアップロードするように構成できます。
それはかなり可能だと思います。おそらく、このように jar を削除して、権限がある場合はアプリケーションが確実に消えるようにすることができます。
File jar = new File(".\\app.jar");
jar.deleteOnExit();
System.exit(0);
また、Nullsoft Scriptable Install Systemのようなものを使用すると、独自のインストール済み/アンインストーラーを作成できるようになります。