gpt4 book ai didi

Java 程序自行删除 - 不工作

转载 作者:行者123 更新时间:2023-11-30 07:00:43 24 4
gpt4 key购买 nike

我正在尝试创建一个程序,该程序可以创建自身的副本并删除原始项目文件夹。

(仅供引用:项目内部有自己的 JRE)(仅供引用:该程序在 Windows 上运行)

所以:

为了能够做到这一点,除了我的主要 main 方法之外,类中还有第二个 main 方法,称为 SelfUpdater。

在我的主线程中,我将项目复制到第二个文件夹。然后在第二个项目文件夹中运行 SelfUpdater 的 main 方法:

这应该意味着我正在运行一个全新的实例,与第一个 java.exe 完全无关(一旦新实例启动,它就已经被 system.exit(0) 关闭)。

但是当我尝试删除第一个文件夹时,出现错误“删除旧 client.java.io.IOException 时出错:无法删除文件”。 实际上它删除了一些文件,但我无法删除Application.exe及其lib文件夹。

其文件夹未在 Windows 中打开。它没有被其他任何东西使用。我也无法手动删除该文件(Windows 说它正在使用中)。一旦第二个 java.exe 终止,我就可以将其删除。

我无法给出完整的工作示例,但我在主线程中调用以下方法:

public static void selfUpdate() {

try {
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String rootPath = System.getProperty("user.dir");

String path = null;

File parentFolder = null;
File originalClientFolder = new File(rootPath);
parentFolder = originalClientFolder.getParentFile();

File secondClientFolder = new File(parentFolder.getAbsolutePath() + separator + "runLAST");
FileUtils.copyDirectory(originalClientFolder, secondClientFolder);

path = secondClientFolder.getAbsolutePath() + separator + "jre8" + separator + "bin" + separator + "java";

ProcessBuilder processBuilder = new ProcessBuilder(path, "-cp", classpath, SelfUpdater.class.getName(), downloadURL, rootPath);
processBuilder.directory(secondClientFolder);
processBuilder.start();

System.exit(0);

} catch (Exception ex) {

}
}

我的 SelfUpdater 类的主要内容是:

public static void main(String[] args) {
try {
String originalClientFolderPath = args[1];
//
File oldClientFolder = new File(originalClientFolderPath);

System.out.println("Deleting old client recursively. Folder: " + oldClientFolder.getAbsolutePath());
try {
FileUtils.deleteDirectory(oldClientFolder);
} catch (Exception ex) {
}
}
}

最佳答案

显然,我忘记更改类路径。

我正在考虑留下这个问题,因为人们可能需要这样的代码部分。但最后,被调用的方法更改为:

public static void selfUpdate() {

try {
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String rootPath = System.getProperty("user.dir");

String path = null;

File parentFolder = null;
File originalClientFolder = new File(rootPath);
parentFolder = originalClientFolder.getParentFile();

File secondClientFolder = new File(parentFolder.getAbsolutePath() + separator + "runLAST");
FileUtils.copyDirectory(originalClientFolder, secondClientFolder);

// ADDED: --------------------------------------------------------
String origialClientFolderName = originalClientFolder.getName();
classpath = classpath.replace(origialClientFolderName, "runLAST");
// ---------------------------------------------------------------

path = secondClientFolder.getAbsolutePath() + separator + "jre8" + separator + "bin" + separator + "java";

ProcessBuilder processBuilder = new ProcessBuilder(path, "-cp", classpath, SelfUpdater.class.getName(), downloadURL, rootPath);
processBuilder.directory(secondClientFolder);
processBuilder.start();

System.exit(0);

} catch (Exception ex) {

}
}

关于Java 程序自行删除 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40977291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com