Jump to content

Java7 Java6 Version Kontrolde Takıldım


radyofon
 Share

Recommended Posts

İyi Çalışmalar Arkadaşlar!...

Bilgisayarda java 7 mi yoksa java 6 versiyonları mı yüklü olduğunu tespit etmek için aşağıdaki gibi bir script hazırladım fakat takıldım. Eğer bilgisayarda java7 varsa klasörü ProgramFiles\java\\jre7 klasöründe oluyor. Java6 yüklü ise ProgramFiles\java\\jre6 klaörü içerisinde oluyor. Kullandığımız program java7 ile çalışmadığı için java versiyon kontrolü, kullanıcıyı bilgilendirmesi ve daha sonra java7 uygulamasını kaldırıp kaldırmayacağını soracağım. Dediğim gibi kodlarım aşağıdaki gibi fakat 2 ayrı klasör içerisinde dll dosyalarını kontrol ettiğim için bir türlü iki klasör arasında nasıl bağlantı kuracağımı bilemedim. Tek klasör yolu olsa kodlar çalışıyor. Yardımcı olursanız sevinirim.

Tek Klasörlü (jre6) kodlar
[code]
jVersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre6\\bin\\java.dll");
nError = Application.GetLastError();
if nError == 0 then
-- Hata yoksa
sOutput = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (jVersionInfo) do
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end

Dialog.Message("File Version Information", sOutput);
else
-- Hata varsa
Dialog.Message("Error", _tblErrorMessages[nError]);
end
[/code]

Çift klasörlü kodlar(Kullanıcıda hem java6 hem java7 kurulu ise yani jre6 ve jre7 klasörleri)
[code]

j7VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre7\\bin\\java.dll");
j6VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre6\\bin\\java.dll");
nError = Application.GetLastError();
if nError == 0 then
-- Hata yoksa
sOutput = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (j6VersionInfo) do --------- Buranın bu şekilde olmaması gerekir. Hem jre7 hem de jre6 kontrol edilebilmeli
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end
Dialog.Message("File Version Information", sOutput);
else
--Hata varsa
Dialog.Message("Error", _tblErrorMessages[nError]);
end
[/code] Edited by radyofon
Link to comment
Share on other sites

regeditten de çalışır. Denedim. Benim problemim programı kaldırmakta veya kurmakta değil. Yukarıdaki 2 adet kod scriptlerine bakarsanız arada ikinci bir klasör farkı olduğunu görürsünüz. Benim sıkıntım kod mantığında. Birinci script gayet iyi çalışıyor. jVersionInfo yolundaki jre6 yolunu jre7 yaparsanız ve pc de java7 kurulu ise o zaman da bilgi verir. kodları bu şekilde rahat çalıştırabiliyorum. fakat hem jre6 hem jre7 olursa for döngüsünde nasıl bir değişiklik yapmalıyım ya da if döngüleri mi kullanmalıyım. takıldım kaldım. yani 2 adet jversionInfo tanımlaması olacak ama gerisi nasıl olacak??[img]http://www.tnctr.com/public/style_emoticons/default/wacko.gif[/img]

Link to comment
Share on other sites

[b]Peki o zaman. Yapmak istediğini doğru anladıysam sadece dosya kontrolüyle de yapabiliriz. Örneğin Java7 dizininde java.dll varsa, Java 7 yüklü, Java6 dizininde java.dll varsa Java 6 yüklü. İkisini birden de kontrol ettirmek mümkün olur.[/b]

Link to comment
Share on other sites

jre6/bin/java.dll ve jre7/bin/java.dll dosyaları var. Tabii her iki versiyonda kurulu ise. Yoksa, hangi versiyon kurulu ise o klasör ve o dll var. Bu, yukarıda yazdığım kodlarda da böyle zaten. Bence yazdığım ilk kodu ams projene aktar ve dene. Bir de java 7 yi kur ve klasörü jre6 yerine jre7 yap öyle dene. İkisinde de bilgi verdiğini göreceksin. Benim problemim, verdiği bu bilgiyi, her ikisinin de kurulu olması durumunda nasıl alacağımız.

Link to comment
Share on other sites

Bilgisayarıma hem java6 hem de java7 kurdum. Kodları da aşağıdaki şekle çevirdim fakat sadece java6 bilgilerini veriyor. Acaba nerede hata yapıyorum?
[code]j7VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre7\\bin\\java.dll");j
6VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre6\\bin\\java.dll");
jVersionInfo = j6VersionInfo or j7VersionInfo
nError = Application.GetLastError();
if nError == 0 then
-- Hata yoksa
sOutput = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (jVersionInfo) do
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end
Dialog.Message("File Version Information", sOutput);
else
--Hata varsa
Dialog.Message("Error", _tblErrorMessages[nError]);[/code]

Edited by radyofon
Link to comment
Share on other sites

Bilgisayarıma hem java6 hem de java7 kurdum. Kodları da aşağıdaki şekle çevirdim fakat sadece java6 bilgilerini veriyor. Acaba nerede hata yapıyorum.

[code]
j7VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre7\\bin\\java.dll");
j6VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre6\\bin\\java.dll");
jVersionInfo = j6VersionInfo or j7VersionInfo
nError = Application.GetLastError();
if nError == 0 then
-- Hata yoksa
sOutput = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (jVersionInfo) do
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end
Dialog.Message("File Version Information", sOutput);

else
--Hata varsa
Dialog.Message("Error", _tblErrorMessages[nError]);
end
[/code]

Edited by radyofon
Link to comment
Share on other sites

  • Editor

for düngüsü ile alınca table oldugundan tüm verileri getiriyor.O yüzden aşagıdakini kullansan daha iyi olur.

j6VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre6\\bin\\java.dll");

Dialog.Message("",j6VersionInfo.ProductVersion);

Link to comment
Share on other sites

Aşağıda yaptığım kodlar acaba neden çalışmıyor... Ama çalışanlar da diğerleri... Java 6 klasör olarak java altında jre6 olduğu gibi jre6_1_24 gibi de oluşabiliyor. Bu nedenle dll dosyalarını ararken Java altındaki jre ye bakmak doğru olmuyor. Java altındaki tüm java.dll lere klasörden bağımsız bakmak gerekiyor.

Çalışmayan Kodlar


[code]JavaFolderFind = Folder.Find(_ProgramFilesFolder, "Java", false, nil);
if JavaFolderFind then
Dialog.Message("Java kontrol", "Java klasörü bulundu!");
JavaDllFind = File.Find(_ProgramFilesFolder.."\\Java", "java.dll", false, true, nil);
if JavaDllFind then
----Buluna javaların klasör adreslerini yazdır---
----Klasör adreslerinden yola çıkarak java.dll dosyalrını içinden çek ve oku----
File.GetVersionInfo

txt = ""
for Name, Contents in pairs(JavaDllFind) do
txt = txt .. Name .. ": " .. Contents .. "\r\n";
end
Dialog.Message("File Version Information", txt);
end
else
Dialog.Message("Error", _tblErrorMessages[nError]);end[/code]

Çalışan Kodlar

[code]j7VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre7\\bin\\java.dll");
j6VersionInfo = File.GetVersionInfo(_ProgramFilesFolder .. "\\Java\\jre1.6.0_25\\bin\\java.dll");
--pv = tVersionInfo.ProductVersion;
nError = Application.GetLastError();
if nError == 0 then
-- There was not an error
sOutput = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (j6VersionInfo) do
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end

-- Output string contents to the user
Dialog.Message("File Version Information", sOutput);

sOutput2 = "";
-- Traverse the table, storing info in a string
for Name, Contents in pairs (j7VersionInfo) do
sOutput2 = sOutput2 .. Name .. ": " .. Contents .. "\r\n";
end

-- Output string contents to the user
Dialog.Message("File Version Information", sOutput2);
else
-- There was an error, alert the user
Dialog.Message("Error", _tblErrorMessages[nError]);
end[/code]

Edited by radyofon
Link to comment
Share on other sites

@MostWanted
@Kintaro
@pairs
@_Baba
@spydevil
@blackman12
.
.
.
.
Daha kimlere çağrı yapsam bilemiyorum ki!!!...Çalışmayan kodları çalıştırabilecek bir üstadımız yok mu acaba?

Edited by radyofon
Link to comment
Share on other sites

Şimdi ilk önce plugins kısmından "Wow64" pluginini aktif etmen gerekiyor.Ettikten sonra;

[code]if (System.Is64BitOS()) then
sVersions = Wow64.RegistryDoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment",Wow64.KEY64)
else
sVersions = Wow64.RegistryDoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment",Wow64.KEY32)
end

if sVersions == nil then
Dialog.Message("Hata", "Sisteminizde Java Run Environment bulunamadı.")
else
if (System.Is64BitOS()) then
sJava6= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java6FamilyVersion",false,Wow64.KEY64)
sJava7= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java7FamilyVersion",false,Wow64.KEY64)
else
sJava6= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java6FamilyVersion",false,Wow64.KEY32)
sJava7 = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment", "Java7FamilyVersion",false,Wow64.KEY32)
end

if sJava6 == "" then
sJava6 = "Bulunamadı."
elseif sJava7 == "" then
sJava7 = "Bulunamadı."
end
Dialog.Message("Java", "Java6 versiyonu:"..sJava6.."\r\nJava7 versiyonu:"..sJava7)
end[/code]

Bu 32 bitteki java sürümlerini ve 64 bit sistemlerdeki 32 bit java sürümlerini bulur.Kolay gelsin.

Edited by MostWanted
Link to comment
Share on other sites

@MostWanted
@pairs
Ben bu işi registry dan yapmak istemiyorum. Registry da currentversion keyden java versiyonunu görme imkanı var zaten. Ben istiyorum ki, bu dll dosyasından okuyayım. Çünkü orada java hakkında çok ayrıntılı bilgiler veriyor. Company name den tut da, her türlü bilgi var. Bana dll dosyasının okunmasında yardımcı olursanız sevinirim. Size çalışan kodları verdim fakat dediğim gibi java altındaki klasör ismi değişken olabiliyor. Kiminde jre6 kiminde de jre1.6.0_25 gibi olabiliyor.

Link to comment
Share on other sites

  • Editor

O halde java.dll dosyasını programfiles altında aratıp her bulunan java.dll dosyasının versiyonunu veya alacagın değerleri alıp yazdırmak en doğrusu olacaktır.

Link to comment
Share on other sites

  • Editor

[code]function found (filename)
bilgi = File.GetVersionInfo(filename);
Dialog.Message("",bilgi.FileVersion.." + " ..bilgi.CompanyName);
return true;
end

File.Find(_ProgramFilesFolder.."\\Java", "java.dll", true, false, nil, found);
[/code]
Al dostum bu işini görür.

Link to comment
Share on other sites

Teşekkür ederim üstadım. İş görüyor fakat bir şey sormak istiyorum. Benim yazdığım çalışan kodlarda daha detaylı bilgi veriyor idi. Oradaki for döngüsü içerisindeki gibi çıkartmak mümkün değil mi? Maksat iş görmesi değil. Yoksa registry dan da okutabilirdik. Amacım o çalışmayan kodları çalıştırmak. Hatayı nerede yapıyorum veya neleri eksik yapıyorum?

Link to comment
Share on other sites

  • Editor

function found (filename)
bilgi = File.GetVersionInfo(filename);
Dialog.Message("",[color="#FF0000"]bilgi.FileVersion.." + " ..bilgi.CompanyName[/color]);
return true;
end

File.Find(_ProgramFilesFolder.."\\Java", "java.dll", true, false, nil, found);


kırmızı ile işaretlediğim yeri dahada genişletebilirsin.

Edited by pairs
Link to comment
Share on other sites

Şöyle söyliyeyim sana takıntılarla programlama yürümez.Program Files ile zorlamaya gerek yok.Bu işte regeditten faydalanmak daha AKILLICADIR.Çünkü regedit hızlıdır ve yeri değişmezdir.Hem daha detaylı dediğin neyi detaylı anlamadım?Sen zaten ürün sürümlerini istiyodun onu da hem 64 bite hem de 32 bite uyacak şekilde yaptım.Bence pairs'i boşu boşuna yorma.

Edited by MostWanted
Link to comment
Share on other sites

Sonunda istediğim gibi çalıştı. Tabii ki bu işte pairs ın da katkısı büyük. Kodlar aşağıda:


[code]function found (filename)
bilgi = File.GetVersionInfo(filename);
sOutput = "";
for Name, Contents in pairs (bilgi) do
sOutput = sOutput .. Name .. ": " .. Contents .. "\r\n";
end
Dialog.Message("File Version Information", sOutput);
return true;
end
File.Find(_ProgramFilesFolder.."\\Java", "java.dll", true, false, nil, found);[/code]

Edited by radyofon
Link to comment
Share on other sites

[quote name='MostWanted' date='17 June 2012 - 22:40 ' timestamp='1339962003' post='1213041']
Şimdi ilk önce plugins kısmından "Wow64" pluginini aktif etmen gerekiyor.Ettikten sonra;

[code]if (System.Is64BitOS()) then
sVersions = Wow64.RegistryDoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment",Wow64.KEY64)
else
sVersions = Wow64.RegistryDoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment",Wow64.KEY32)
end

if sVersions == nil then
Dialog.Message("Hata", "Sisteminizde Java Run Environment bulunamadı.")
else
if (System.Is64BitOS()) then
sJava6= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java6FamilyVersion",false,Wow64.KEY64)
sJava7= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java7FamilyVersion",false,Wow64.KEY64)
else
sJava6= Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\JavaSoft\\Java Runtime Environment","Java6FamilyVersion",false,Wow64.KEY32)
sJava7 = Wow64.RegistryGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Runtime Environment", "Java7FamilyVersion",false,Wow64.KEY32)
end

if sJava6 == "" then
sJava6 = "Bulunamadı."
elseif sJava7 == "" then
sJava7 = "Bulunamadı."
end
Dialog.Message("Java", "Java6 versiyonu:"..sJava6.."\r\nJava7 versiyonu:"..sJava7)
end[/code]

Bu 32 bitteki java sürümlerini ve 64 bit sistemlerdeki 32 bit java sürümlerini bulur.Kolay gelsin.
[/quote]

@MostWanted
Üstadım senin yazdığın Registry key kodlarına baktım ve kendi yaptığımki ile karşılaştırdım fakat kendime net bir cevap bulamadım. Benim yaptığım ile senin yaptığın (tabii ki daha teferruatlı ama nedir bilmiyorum) arasındaki fark nedir? Benim yaptığım eksik mi çalışır? Bizim kullandığımız programda sistem ve windows 64 bit de olsa java 32 bit olmak zorunda. Kendi yaptığımın kodları da aşağıda:
[code]if System.Is64BitOS() then
sCurrentVersion = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Wow6432Node\\JavaSoft\\Java Runtime Environment", "CurrentVersion");
else
sCurrentVersion = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\JavaSoft\\Java Runtime Environment", "CurrentVersion");
end
if sCurrentVersion == "1.7" then
Dialog.Message("Dikkat!", "Bilgisayarınızda Java7 yüklü!\r\n\r\ne-içişleri Java7 ile çalışmamaktadır.\r\n\r\nLütfen kaldırınız!...");
end[/code]

Edited by radyofon
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...