الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية استرجاع البرامج المثبتة على الكمبيوتر؟

بدأه searcherman1973 في 30 أغسطس 2009 · 10 رد · 1,853 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام للجميع و كل عام و انتم بخير

حاولت أن استرجع قائمة بالبرامج المثبتة على الكمبيوتر و ذلك باستخدام الريجيستري

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

و كانت النتيجة انني حصلت على قائمة بـ 96 برنامج بينما البرامج التي تظهر في قائمة add or remove programs تحتوي على 83 برنامج فقط.

و يبدو ان البرامج الاضافية هي أجزاء من ضمن البرامج الاخرى.

هل توجد طريقة اخرى احصل من خلالها على البرامج المثبتة و الظاهرة في add or remove programs فقط!!!.

ساعدوني يا جماعة

تم تعديل هذه المشاركة بواسطة searcherman1973 في 31 أغسطس 2009 في 10:51

#2

جرب أن تعمل بحث داخل المحتوى DisplayName عن كلمة "Update" أو "Security update" و تتجاهل كل واحدة تبدأ بها. فهذه تدل على تثبيت Update لبرنامج ما و ليس البرنامج نفسه.

تحياتي...

#3
محمد رضى كتب:
جرب أن تعمل بحث داخل المحتوى DisplayName عن كلمة "Update" أو "Security update" و تتجاهل كل واحدة تبدأ بها. فهذه تدل على تثبيت Update لبرنامج ما و ليس البرنامج نفسه.

تحياتي...

ان عدد البرامج المستعادة شاملاً الـ update هو 136 و لكنني احصل على 93 لأنني اعتمد على parentkey لذا فأنا احصل على 93 بدلاً من 136 و مع ذلك فإن عدد البرامج مازال أكبر من العدد الموجود داخل الـ add or remove programs :blush: :( :( :(

#4
searcherman1973 كتب:
سلام للجميع و كل عام و انتم بخير

حاولت أن استرجع قائمة بالبرامج المثبتة على الكمبيوتر و ذلك باستخدام الريجيستري

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

و كانت النتيجة انني حصلت على قائمة بـ 96 برنامج بينما البرامج التي تظهر في قائمة add or remove programs تحتوي على 83 برنامج فقط.

و يبدو ان البرامج الاضافية هي أجزاء من ضمن البرامج الاخرى.

هل توجد طريقة اخرى احصل من خلالها على البرامج المثبتة و الظاهرة في add or remove programs فقط!!!.

ساعدوني يا جماعة

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

حبيب قلبي بإمكانك وبسهولة ,, أن تقوم بإجراء بحث عن كل ملف اسمه

Uninstall

في المسار C:\PROGRAM FILES

ثم البحث عن الملفات المسماة Uninstall

ووضعها في قائمة كالتالي

Dim Getfiles() as string
 GetFiles = IO.Files.GetFiles("C:\ProgramFiles",SubDirectories)
 Dim x as Integer
 For x = 0 to Getfiles.Count -1
 if Getfiles(x).indexOf("Uninstall") <> -1 Then
 ListBox1.Items.Add(GetFiles(x))
 Next

وهكذا ,,,

ولكن صديقي انا لم أحفظ البارامتر الثاني للدالة

IO.Files.GetFiles

وليس بإمكاني أن أفتح الفيجوال بيسك فهو غير متوافر لدي الآن

ولكنني أقصد أن أوحي بأن تبحث في جميع المجلدات المتضمنة للمجلد

Program Files.

والصلاة والسلام على سيدنا محمد وعلى آله وصحبه أجمعين

السلام عليكــم ورحمـة الله وبركاتــه ،،

تم تعديل هذه المشاركة بواسطة VULPINE في 1 سبتمبر 2009 في 01:09

#5

شكراً لفكرتك الجميلة.....

ولكن للأسف فإنها لا تحقق الهدف المطلوب.... حيث أن عدد ملفات uninstall داخل C:\PROGRAM FILES على كمبيوتري لا تتجاوز 5 ملفات مع ان عدد البرامج المثبتة 83 برنامج

#6

ده مثال من موقع مايكروسوفت

Sub Main()

		' Open the Uninstall registry subkey.
		Dim Key As RegistryKey = Registry.LocalMachine.OpenSubKey _
		   ("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", False)
		' Retrieve a list of installed software products.
		' This list also includes some software products that are not valid.
		Dim SubKeyNames() As String = Key.GetSubKeyNames()
		' Declare a variable to iterate through the retrieved list of 
		' installed software products.
		Dim Index As Integer
		' Declare a variable to hold the registry subkey that correspond
		' to each retrieved software product.
		Dim SubKey As RegistryKey
		Console.WriteLine("The following software products are installed on this computer:")
		Console.WriteLine("")
		' Iterate through the retrieved software products.
		For Index = 0 To Key.SubKeyCount - 1
			' Open the registry subkey that corresponds to the current software product.
			' SubKeyNames(Index) contains the name of the node that corresponds to the 
			' current software product.
			SubKey = Registry.LocalMachine.OpenSubKey _
			   ("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" + "\" _
				  + SubKeyNames(Index), False)
			' Verify that the DisplayName exists. If the DisplayName does not exist, 
			' return a null string. If the returned value is a null string, the 
			' DisplayName does not exist, and the software product is not valid.
			If Not SubKey.GetValue("DisplayName", "") Is "" Then
				' The current software product is valid.
				' Display the DisplayName of this valid software product.
				Console.WriteLine(CType(SubKey.GetValue("DisplayName", ""), String))
			End If
		Next

		Console.WriteLine("Press ENTER to quit.")
		Console.ReadLine()

	End Sub

اضغط هنا للدخول على صفحة المثال

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#7

سلامي و تحياتي للجميع

مع الشكر الخاص لكل الاعضاء الذين يحاولون مساعدتي على حل المشكلة.....

Muhammad alaa كتب:
ده مثال من موقع مايكروسوفت

Sub Main()

		' Open the Uninstall registry subkey.
		Dim Key As RegistryKey = Registry.LocalMachine.OpenSubKey _
		   ("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", False)
		' Retrieve a list of installed software products.
		' This list also includes some software products that are not valid.
		Dim SubKeyNames() As String = Key.GetSubKeyNames()
		' Declare a variable to iterate through the retrieved list of 
		' installed software products.
		Dim Index As Integer
		' Declare a variable to hold the registry subkey that correspond
		' to each retrieved software product.
		Dim SubKey As RegistryKey
		Console.WriteLine("The following software products are installed on this computer:")
		Console.WriteLine("")
		' Iterate through the retrieved software products.
		For Index = 0 To Key.SubKeyCount - 1
			' Open the registry subkey that corresponds to the current software product.
			' SubKeyNames(Index) contains the name of the node that corresponds to the 
			' current software product.
			SubKey = Registry.LocalMachine.OpenSubKey _
			   ("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" + "\" _
				  + SubKeyNames(Index), False)
			' Verify that the DisplayName exists. If the DisplayName does not exist, 
			' return a null string. If the returned value is a null string, the 
			' DisplayName does not exist, and the software product is not valid.
			If Not SubKey.GetValue("DisplayName", "") Is "" Then
				' The current software product is valid.
				' Display the DisplayName of this valid software product.
				Console.WriteLine(CType(SubKey.GetValue("DisplayName", ""), String))
			End If
		Next

		Console.WriteLine("Press ENTER to quit.")
		Console.ReadLine()

	End Sub

اضغط هنا للدخول على صفحة المثال

و الله ولى التوفيق

بالنسبة لرد الاخ محمد.....

فأنا أستخدم نفس الكود تقريباً و لكنه يضيف اسماء البرامج الى قائمة listbox

و هذا الكود يسترجع لي 108 برامج و هذا يعني أن المشكلة لم يتم حلها بعد....

شكراً لجهود الجميع مرة أخرى

و انا في انتظار مساعدتكم....

#8
searcherman1973 كتب:
شكراً لفكرتك الجميلة.....

ولكن للأسف فإنها لا تحقق الهدف المطلوب.... حيث أن عدد ملفات uninstall داخل C:\PROGRAM FILES على كمبيوتري لا تتجاوز 5 ملفات مع ان عدد البرامج المثبتة 83 برنامج

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

أخي قم إذا بالبحث عن الملفات المسماة ب Uninstall في كل الأقراص فهو أمر سهل جداً كما رأيت في الكود السابق

فمن المؤكد المؤكد المؤكد أن كل برنامج له ملف إزالة تنصيب وهو مو جود ربما في القرص سي في مجلد الويندوز وربما في ال Program Files

فلا تعتمد فقط على دليل واحد فالأمر من أبسط ما يكون icon1.gif

#9
اقتباس
فمن المؤكد المؤكد المؤكد أن كل برنامج له ملف إزالة تنصيب وهو مو جود ربما في القرص سي في مجلد الويندوز وربما في ال Program Files

ليس كل برنامج له ملف إزالة تنصيب وحتى لو كان كذلك فليس شرطا أن يكون اسمه Uninstall

البرامج التى تستخدم Windows Installer يمكن ألا تحتوى أبدا على هذا الملف لكنها تظهر فى قائمة

Add/Remove Programs وعند اختيار إلغاء التنصيب يقوم البرنامج باستدعاء برنامج آخر وهو msiexec بمعاملات معينة لإلغاء التنصيب

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#10

اخى قمت بتعديل مثال ميكروسوفت الموجود بالأعلى و قد اظهر ما لدى من برامج بإستثناء بعض الـ Hotfix التى لا تندرج تحت Key معين و ايضا برنامج utorrent لم يظهر لا اعرف لماذا

	Sub Main()

		Dim Key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", False)

		Dim SubKeyNames() As String = Key.GetSubKeyNames()

		Dim SubKey As RegistryKey
		Console.WriteLine("The following software products are installed on this computer:")
		Console.WriteLine("")

		Dim cnt As Integer = 0
		Dim arr() As String = Nothing

		For Index As Integer = 0 To Key.SubKeyCount - 1
			SubKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" + "\" + SubKeyNames(Index), False)
			If SubKey.GetValue("PackageMarker", "2") Is "2" AndAlso SubKey.GetValue("SystemComponent", "") Is "" AndAlso SubKey.GetValue("ParentKeyName", "") Is "" Then
				If SubKey.GetValue("DisplayName", "") IsNot "" AndAlso CStr(SubKey.GetValue("DisplayName", "")).Contains("Hotfix") = False Then
					ReDim Preserve arr(cnt)
					arr(cnt) = SubKey.GetValue("DisplayName", "").ToString
					cnt += 1
				End If
			End If
		Next

		Array.Sort(arr)

		For i As Integer = 0 To arr.Length - 1
			Console.WriteLine(arr(i))
		Next

		Console.WriteLine()
		Console.WriteLine("Application count: " & cnt)

		Console.WriteLine("Press ENTER to quit.")
		Console.ReadLine()

	End Sub

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#11

مشكورين يا شباب و سأقوم بتجريب الكود الجديد و انا كلي أمل أنه سينجح.......... سلام

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…