2017-10-30 14 views
1

自分自身を削除するにはJARファイルが必要です。JARファイル自体はどのように削除できますか?

問題は、実行中にWindowsがJARファイルをロックし、自身を直接削除できないことです。

私はバッチスクリプトは、JARのプロセスを強制終了してから、ファイルを削除することができソリューションに見てきましたが、それはBatchファイル経由で実行可能ではありませんので、

  • System.exit(0)が望まれていません。
  • taskkill /F /IM "java.exe"は、ALLJavaのプロセスを殺すので望ましくありません。
  • jpsbecause it is only available in the JDKを使用することはできません。ユーザーはJREを実行して失敗する可能性があります。

は、私はその後、私はJavaコードを使用して、現在のJARPIDを見つけることができます解決策を探してBatchコマンドを書き出すと、例えばプロセスを殺すPIDを挿入するにこだわっています次のように:

printWriter.println("taskkill /PID " + currentJARPID); 

あなたは、これは何のためにあるのか迷っている場合は、this答えを確認することができます。ここで

+0

javaファイルがbatファイルの出力を読み込み、killコマンドを待つことはできますか?または、Javaファイルとやりとりすることなく、batファイルからファイルを削除する必要がありますか? – phflack

+0

@phflack: 'JAR'がもはやロックされずに削除できるように、バッチファイルから' Java'プロセスを削除する必要があります。 'Java'コードの中では、' Windows'でのファイルロックのため、同時に実行したり削除したりすることができないので、削除はできません。 – BullyWiiPlaza

+0

私は、Javaプログラムが.batの出力を読み取ることができるかどうかを言い換えると理解します。 – phflack

答えて

2

それはテストするためにwaiting 5 seconds

後にjarファイルを削除し、このに電力を供給する主な機能はcmd /c ping localhost -n 6 > nul && del Delete.jar

ある作業例

public class Delete 
{ 
    public static void main(String[] args) throws Throwable 
    { 
     System.out.println("Running"); 

     System.out.println("Deleting"); 
     Runtime.getRuntime().exec("cmd /c ping localhost -n 6 > nul && del Delete.jar"); 

     System.out.println("Ending"); 
     System.exit(0); 
    } 
} 

ですが、私はjarファイルを構築するためにjavac Delete.java && jar cfe Delete.jar Delete Delete.classを使用し、 java -jar Delete.jar実行する

また、jarファイルを削除できなかったことを確認しましたファイルを実行している間に、new File("Delete.jar").delete();とWindowsエクスプローラを使用して

+0

.classファイルにはWindowsロックの問題がなく、 'new File(" Delete.class ");'が使用されます。 – phflack

+0

'-n 2'を使ってもうまく動作しますが、速く削除してください – BullyWiiPlaza

関連する問題