2011-11-22 34 views
16

有沒有辦法阻止Java安裝例程(例如jdk-7u1-windows-i586.exe)拷貝java.exe進入C:\Windows\system32目錄?如何防止在Windows的system32中安裝java.exe?

我必須在客戶端的筆記本電腦上安裝我的軟件,我不想破壞已安裝在機器上的其他Java應用程序。換句話說,我想安裝一個專用JRE,它只被我的軟件使用。

現在,我將已經安裝的JRE從我的電腦複製到客戶端的機器上。

+0

我認爲Java安裝程序總是將自己安裝到一個獨立的目錄中。沒有?我認爲,只需將安裝目錄複製到另一臺計算機即可以xcopy方式安裝Java。 – selbie

+2

@selbie:它可以以這種方式安裝,但這不是默認安裝程序所做的:它*將* JRE安裝到它自己的目錄,而* *也將* java.exe複製到'system32'目錄。 –

+0

@selbie:安裝程序還創建一些註冊表項。我沒有找到適用於Windows的簡單** zip存檔**,可以用來代替安裝程序。 – rmoestl

回答

3

你可以只提供JRE你想在你的軟件使用和:

  • 你運行你的應用程序
  • 指向正確的java.exe文件之前,設置JAVA_HOME變量(例如..\jre1.5.0_22\bin\java <your_java_main>

這可以在* .bat文件中完成。

運行您創建的* .bat文件後,所有其他Java版本都將被忽略,並且該計算機上安裝或將要安裝的版本都無關緊要。

+1

這隻會確保*我的應用程序*使用正確的JRE。如果未設置JAVA_HOME並依賴通常位於_system32_中的默認JRE,那麼已安裝在機器上的其他應用程序可能會中斷。但是,如果我安裝了新的JRE(可能是測試版),** java.exe **將被複制到system32中,因此其他Java應用程序可能會使用beta版JRE。那就是問題所在。 – rmoestl

+0

如果我沒有弄錯,只有在使用JDK而不是JRE時才需要'JAVA_HOME'環境變量。 JRE自動使用系統屬性'java.home'從Windows註冊表中獲取Java默認路徑 –

+0

僅在cmd會話期間使用'SET'完成綁定更改,因此它不會影響其他應用程序。您可以通過在批處理文件末尾調用'exit'來確保用戶不會嘗試從同一個cmd會話中啓動任何其他應用程序。 – vaughandroid

0

我想嘗試的一種方法是創建一個名爲java.exe的只寫空文件到System32文件夾中。

+0

這不是一個選項。如果「real」java.exe已經在system32中,該怎麼辦? – rmoestl

+0

那麼,設置爲只讀? – Esko

7

我昨天發現在Windows上有一個Java版本的問題,因爲你知道保持java最新是最關鍵的,特別是位於Windows系統32或syswow64文件夾的Internet Explorer使用的JRE。

您可以在C:驅動器中執行java搜索,並查看它找到的各種可執行文件,以確定這種情況是否適用於特定系統。

做一些研究,我發現,當的Java更新運行時,它僅更新安裝在JAVA家中的文件,通常位於程序文件後,但它不更新位於Windows系統中的文件文件夾。因此,由於系統文件夾位於默認系統PATH中,Internet Explorer的使用繼續使用舊版本的JAVA文件(java.exe,javaw.exe,javaws.exe)

解決方案是到卸載java使用控制面板卸載程序功能,下載最新版本並再次安裝

乾杯! Fernando

+0

我不認爲這是事實。 Windows System32目錄只包含java.exe和其他java啓動程序。實際的VM(jvm.dll)和支持的庫/類位於由Java更新程序更新的JDK/JRE目錄中。 –

0

我發現最新的JDK仍然沒有針對註冊表編寫正確的代碼。 問題是如果計算機沒有JRE,JDK不會在註冊表中正確註冊JRE。

對於那些安裝JDK 1.7u72只要添加軟件\ JavaSoft \ Java運行時環境爲錯誤消息指示。然後添加值爲1.7的CurrentVersion的字符串條目。 然後添加Software \ JavaSoft \ Java Runtime Environment \ 1.7,並放入一個值爲「C:\ Program Files \ Java \ jre7」的JavaHome字符串條目。 JRE將正常運行。如果你使用註冊表,那麼寫下正確的代碼,否則不要使用註冊表!

5

我最近升級到Java 8和system32下的Java版本是發現了這個問題還是Java 7中它停止,你甚至運行的版本,因爲它抱怨註冊表項

U:\>java -version 
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' 
has value '1.8', but '1.7' is required. 
Error: could not find java.dll 
Error: Could not find Java SE Runtime Environment. 

執行以下向我指出到罪魁禍首:

U:\>where java 
C:\Windows\System32\java.exe 
C:\Program Files\Java\jdk1.8.0_45\bin\java.exe 

我解決了這個問題,只是刪除了system32下的java!我不確定這會有什麼後果。

+3

你可能避免了比創建更多的問題!有一個程序崩潰告訴你它找不到java,而不是一個運行在java的已棄用版本上,而你甚至不知道它會更好。 – Overdrivr

+0

我們還應該刪除其他什麼(或者移到臨時文件夾)?至少java.exe,javaw.exe,javaws。exe,JavaScriptCollectionAgent.dll權利?該DLL似乎正在使用,所以它不能被移動。有其他人嗎? – snaran

+0

@snaran不知道對不起,這在當時做了我的工作 –

0

所有你需要做的就是去控制面板 - >程序卸載程序。卸載舊的Java更新並保留最新的Java更新和Java開發工具包更新。您的最新Java更新和Java開發工具包更新應具有相同的編號。

相關問題