radyofon Posted June 6, 2012 Share Posted June 6, 2012 (edited) İ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 June 6, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
DivaneTR Posted June 6, 2012 Share Posted June 6, 2012 [b]Regeditten denediniz mi ?[/b] [img]http://i.imgur.com/mhgn3.png[/img] [b]Tabi birden fazla Java yüklü ise regeditte nasıl bir durum olacağını bilmiyorum.[/b] Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 6, 2012 Author Share Posted June 6, 2012 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] Quote Link to comment Share on other sites More sharing options...
DivaneTR Posted June 6, 2012 Share Posted June 6, 2012 [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] Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 6, 2012 Author Share Posted June 6, 2012 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. Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) 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 June 18, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) 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 June 6, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 7, 2012 Editor Share Posted June 7, 2012 Java.dll yerine java.exe den çeksene bilgileri aynı dizindeler. Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 7, 2012 Editor Share Posted June 7, 2012 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); Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 7, 2012 Author Share Posted June 7, 2012 Ben de o şekilde istiyorum. Yani table daki şekilde. Size pm attım ulaşabilir misiniz? Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 14, 2012 Author Share Posted June 14, 2012 (edited) 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 June 16, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 14, 2012 Author Share Posted June 14, 2012 (edited) @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 June 14, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
MostWanted Posted June 17, 2012 Share Posted June 17, 2012 (edited) Ş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 June 17, 2012 by MostWanted Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 18, 2012 Editor Share Posted June 18, 2012 Mostwantedın verdiğini bir dene olacaktır eğerki olmazsada ben yardımcı olurum sana. Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 @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. Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 18, 2012 Editor Share Posted June 18, 2012 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. Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 Evet üstadım!...Aynen dediğin gibi ama ProgramFiles altında değil ProgramFiles\Java altında okutmak aramayı daraltır. Çalışmayan kodlar üzerinden yardımcı olursan sevinirim. Orada eksik bir şeyler var... Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 18, 2012 Editor Share Posted June 18, 2012 Ben sana bir örnek hazırlayıp veririm birazdan. Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 18, 2012 Editor Share Posted June 18, 2012 [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. Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 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? Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted June 18, 2012 Editor Share Posted June 18, 2012 (edited) 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 June 18, 2012 by pairs Quote Link to comment Share on other sites More sharing options...
MostWanted Posted June 18, 2012 Share Posted June 18, 2012 (edited) Şö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 June 18, 2012 by MostWanted Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 (edited) 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 June 18, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 (edited) [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 June 18, 2012 by radyofon Quote Link to comment Share on other sites More sharing options...
radyofon Posted June 18, 2012 Author Share Posted June 18, 2012 Bence ikisini birleştirmek gerekiyor gibi. Sendekinde de \Wow6432Node yok görünüyor. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.