2017-02-21 196 views
2

有沒有什麼方法可以在java中使用我們可以卸載的應用程序。我正在開發一個應用程序,我需要檢查應用程序是否安裝。如果安裝了,那麼首先我必須卸載應用程序並安裝它的較新版本。使用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"); 

在這段代碼中我正在刪除的文件夾卸載,但事實並非解決方案的應用程序仍然存在。

+0

使用Java進行,這似乎是overcomplating的事情,因爲你反正風運行命令。將使用powershell來代替。 http://stackoverflow.com/questions/113542/how-can-i-uninstall-an-application-using-powershell – Tobb

+0

由於minigeek提到你將不得不做兩個步驟......其實3。 1)。檢查是否有提及的應用程序的卸載程序並首先運行。 2)。檢查註冊表並刪除它們,但是你將不得不知道註冊表項是如何創建的,如果你破壞了這個註冊表項,你可能會破壞整個機器。 3)。按照您當前的操作刪除文件夾。 仍然不確定爲什麼你需要這樣做,這絕對只適用於Windows。 祝你好運。 –

+0

@QuintonDelpeche是的。刪除未知的註冊表是潛在的危險。我添加了一個解決方案卸載(不完美,但它確實)。糾正我,如果我錯了某個地方 – minigeek

回答

0

我不知道卸載(通用方法)也許有人知道。但有一個第三方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 
     } 
    } 

} 

這僅適用於Windows其他操作系統的bash需要採取行動。

如何卸載(只有當你知道卸載程序路徑)

Process p = new ProcessBuilder("C:\\Program Files\\Mozilla Firefox\\uninstall.exe"); 
p.start(); 
+0

jRegistryKey.dll無法加載,因爲它是32位...所以我想將我的jvm從64位降級到32位 – BleedCode

+0

@SRISHTI是啊。你將不得不移動32位jvm。 – minigeek

+0

@SRISHTI對你有幫助嗎? – minigeek