使用java卸载应用程序

使用java卸载应用程序,java,file,uninstallation,Java,File,Uninstallation,java中是否有任何方法可以用来卸载应用程序。我正在开发一个应用程序,使用它我需要检查应用程序是否已安装。如果安装了,那么首先我必须卸载该应用程序并安装其较新版本 如果未安装,则直接进行安装。 我写的代码是: String v = "C:\\Program Files\\InstalledFile"; File file = new File(v); if(file.exists()==true) { System.out.print("file exis

java中是否有任何方法可以用来卸载应用程序。我正在开发一个应用程序,使用它我需要检查应用程序是否已安装。如果安装了,那么首先我必须卸载该应用程序并安装其较新版本

如果未安装,则直接进行安装。 我写的代码是:

String v = "C:\\Program Files\\InstalledFile";
    File file = new File(v);
    if(file.exists()==true)
    {
        System.out.print("file exist");
        FileUtils.deleteDirectory(file);
        System.out.print("deleted");
        Runtime run = Runtime.getRuntime();
        String msifile = "EP.msi";
        String para="rundll32 SHELL32.DLL,ShellExec_RunDLL msiexec /qb /i C:\\Setup\\EP.msi REBOOT=ReallySuppress";
        run.exec(para);
    }
    else
        System.out.print("file won't exist");

在这段代码中,我删除了要卸载的文件夹,但这不是解决方案,因为应用程序仍然存在。

我不知道如何卸载(通用方法),也许有人知道。但是有一个第三方Java API,您可以用它来爬网Windows注册表。安装在Windows中的每个应用程序都在注册表中注册。你可以在那里查一下。下面是firefox的示例代码

检查:是否安装了特定软件?

import java.io.File;
import java.util.Iterator;

import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RootKey;

public class Test {

    public static void main(String... args) throws Exception {
        RegistryKey.initialize(Test.class.getResource("jRegistryKey.dll").getFile());
        RegistryKey key = new RegistryKey(RootKey.HKLM, "Software\\Mozilla");
        for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
            RegistryKey subkey = subkeys.next();
            System.out.println(subkey.getName()); //look here for "Mozilla FireFox".here will be your body of uninstallation with some conditions
        }
    }

}

使用java来实现这一点似乎有些过分,因为您最终会运行命令。将改用powershell。正如minigeek提到的,你将不得不做两个步骤。。。实际上是3。1). 检查是否有用于上述应用的卸载程序,并首先运行该程序。2). 检查注册表并删除它们,但您必须知道创建了哪些注册表项,如果您破坏了它,您可以破坏整个机器。3). 按当前操作删除文件夹。仍然不确定为什么需要这样做,这肯定只适用于Windows。祝你好运。@QuintonDelpeche是的。删除未知注册表有潜在危险。我添加了一个卸载解决方案(虽然不完美,但确实如此)。如果我在某个地方出错,请纠正我这是一个非常复杂的问题,没有明确的问题。无法加载jRegistryKey.dll,因为它是32位的。。。那么,我是否应该将jvm从64位降级到32位bit@SRISHTI是 啊您将不得不使用32位jvm。@SRISHTI对您有帮助吗?但我开发的应用程序使用的是64位。所以我认为这对我不起作用:)嗯。我不知道其他的方法:(。希望你能解决你的问题
 Process p = new ProcessBuilder("C:\\Program Files\\Mozilla Firefox\\uninstall.exe"); 
 p.start();