PDA

View Full Version : تشخیص نرم افزارهای نصب شده روی سیستم



مهدی رحیم زاده
جمعه 14 دی 1386, 09:41 صبح
سلام
چطوری میتونم تشخیص بدم که چه نرمافزارهایی توی یک سیستم نصب شده اند و بعد بتونم فایل EXE این نرم افزار ها رو پیدا کنم .
منظورم اینه که از طریق برنامه بتونم تمام نرم افزارهای نصب شده روی سیستم رو به کاربر رو نشون بدم و بعد کاربر هرکدوم از اونا رو دوست داشت بتونه از طریق برنامه اجرا کنه .

sinpin
جمعه 14 دی 1386, 10:40 صبح
سلام
چطوری میتونم تشخیص بدم که چه نرمافزارهایی توی یک سیستم نصب شده اند و بعد بتونم فایل EXE این نرم افزار ها رو پیدا کنم .
منظورم اینه که از طریق برنامه بتونم تمام نرم افزارهای نصب شده روی سیستم رو به کاربر رو نشون بدم و بعد کاربر هرکدوم از اونا رو دوست داشت بتونه از طریق برنامه اجرا کنه .

فکر میکنم بهترین راه استفاده از رجیستری باشه.
مثلا تو این آدرس خیلی چیزا میتویند پیدا کنید :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall]

برای مثال :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\Microsoft Visual Studio 2005 Professional Edition - ENU]
"DisplayIcon"="C:\\Program Files\\Microsoft Visual Studio 8\\Setup\\setup.ico"
"DisplayName"="Microsoft Visual Studio 2005 Professional Edition - ENU"
"UninstallString"="C:\\Program Files\\Microsoft Visual Studio 8\\Microsoft Visual Studio 2005 Professional Edition - ENU\\setup.exe"
"VersionMinor"="0"
"VersionMajor"="8"
"Publisher"="Microsoft Corporation"
"InstallLocation"="C:\\Program Files\\Microsoft Visual Studio 8\\"
"UninstallPath"="C:\\Program Files\\Microsoft Visual Studio 8\\Microsoft Visual Studio 2005 Professional Edition - ENU\\setup.exe"
"Readme"="C:\\Program Files\\Microsoft Visual Studio 8\\readme.htm"
"URLUpdateInfo"="http://go.microsoft.com/fwlink/?LinkId=45660"
"HelpLink"="http://go.microsoft.com/fwlink/?LinkId=45396"

Amir Oveisi
جمعه 14 دی 1386, 12:08 عصر
منم نظرم اینه

اینم یه مثال ساده :


string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
foreach (string skName in rk.GetSubKeyNames())
{
using (RegistryKey sk = rk.OpenSubKey(skName))
{
try
{
ListBox1.Items.Add(sk.GetValue("DisplayName"));
}
catch (Exception ex)
{
}
}
}
}

مهدی رحیم زاده
جمعه 14 دی 1386, 16:01 عصر
ممنونم دوستای عزیز
حالا میشه بگید که چطوری می تونم فایل EXE این نرم افزارها رو بدست بیارم .

sinpin
جمعه 14 دی 1386, 17:26 عصر
ممنونم دوستای عزیز
حالا میشه بگید که چطوری می تونم فایل EXE این نرم افزارها رو بدست بیارم .

از اینجا هم - تاحدی - میتونید :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths]برای مثال :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\Photoshop.exe]
"Path"="C:\\Program Files\\Adobe\\Adobe Photoshop CS2\\"
@="C:\\Program Files\\Adobe\\Adobe Photoshop CS2\\Photoshop.exe"یا :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\Winword.exe]
"useURL"="1"
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"
@="C:\\PROGRA~1\\MICROS~3\\OFFICE11\\WINWORD.EXE"
"SaveURL"="1"حول و حوش همین آدرس (CurrentVersion) بچرخید اطلاعات زیادی پیدا میکنید.

linux
جمعه 14 دی 1386, 23:59 عصر
سلام
چطوری میتونم تشخیص بدم که چه نرمافزارهایی توی یک سیستم نصب شده اند و بعد بتونم فایل EXE این نرم افزار ها رو پیدا کنم .
منظورم اینه که از طریق برنامه بتونم تمام نرم افزارهای نصب شده روی سیستم رو به کاربر رو نشون بدم و بعد کاربر هرکدوم از اونا رو دوست داشت بتونه از طریق برنامه اجرا کنه .


using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Product WHERE InstallState = 5");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_Product instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("Description: {0}", queryObj["Description"]);
Console.WriteLine("IdentifyingNumber: {0}", queryObj["IdentifyingNumber"]);
Console.WriteLine("InstallDate: {0}", queryObj["InstallDate"]);
Console.WriteLine("InstallDate2: {0}", queryObj["InstallDate2"]);
Console.WriteLine("InstallLocation: {0}", queryObj["InstallLocation"]);
Console.WriteLine("InstallState: {0}", queryObj["InstallState"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("PackageCache: {0}", queryObj["PackageCache"]);
Console.WriteLine("SKUNumber: {0}", queryObj["SKUNumber"]);
Console.WriteLine("Vendor: {0}", queryObj["Vendor"]);
Console.WriteLine("Version: {0}", queryObj["Version"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}

مهدی رحیم زاده
شنبه 15 دی 1386, 07:34 صبح
دوستای گلم ممنون بابت همه جوابها :
آقا بابک عزیز کد شما زیاد نتونست کمک کنه اما کد قبلی که آقا سینا و برمودای عزیز گفتم خیلی خوب بود ولی اگر میشد که اسم نرم افزار رو همراه با مسیر فایل exe اون پیدا کرد خیلی عالی میشد ، اینجوری تعداد مسیر های فایل exe و اسم نرم افزار ها با هم فرق میکنه !!!

Amir Oveisi
شنبه 15 دی 1386, 15:22 عصر
واسه مسیر فایل اجرایی تو همون جا که تو registry میرین یه Value هست به اسم InstalledLocation که تو اون نوشته

ولی نمیدونم چرا بعضی برنامه هارو نمینویسه مسیرشونو اونجا؟!

behzadk
شنبه 15 دی 1386, 19:05 عصر
می تونی از manegemnt و از کلاس win32_oprationsystem استفاده کنی

Amir Oveisi
یک شنبه 16 دی 1386, 01:04 صبح
می تونی از manegemnt و از کلاس win32_oprationsystem استفاده کنی

میشه بگین اینجا کدوم قسمتش اطلاعات برنامه هارو داره؟

sinpin
یک شنبه 16 دی 1386, 01:14 صبح
دوستای گلم ممنون بابت همه جوابها :
آقا بابک عزیز کد شما زیاد نتونست کمک کنه اما کد قبلی که آقا سینا و برمودای عزیز گفتم خیلی خوب بود ولی اگر میشد که اسم نرم افزار رو همراه با مسیر فایل exe اون پیدا کرد خیلی عالی میشد ، اینجوری تعداد مسیر های فایل exe و اسم نرم افزار ها با هم فرق میکنه !!!

پست شماره ی 5 مشکلتون رو حل نکرد ؟

مهدی رحیم زاده
یک شنبه 16 دی 1386, 07:21 صبح
عرض کردم خدمت شما آقا سینا که من هم اسم نرم افزار رو می خوام و هم مسیر فایل exeاونو اما وقتی که مسیرها رو از اینجا می خونم و اسم ها رو از اون مسیر قبلی تعداد اونا به هم فرق میکنه . مثلا 62 تا مسیر فایل اجرایی دارم و 52 تا اسم نرم افزار ...
می خوام توی یک listbox اسم نرم افزار باشه و روبه روش مسیر فایل اجرایی اون ...
ممنونم بابت وقت گذاشتنتون .

مهدی رحیم زاده
دوشنبه 17 دی 1386, 17:48 عصر
کسی پیشنهاد جدیدی نداره ؟؟؟؟