ايران ويج

نسخه‌ی کامل: چطور میتونم مسیر نصب برنامه ای خاص رو پیدا کنم؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
چطور میتونم مسیر نصب برنامه ای خاص رو پیدا کنم؟
مثلا یه سری مشخصه های ثابت برنامه از قبیل اسم فایل اجرایی برنامه یا تایتلش یا هر چیز دیگه ای رو بگیره و تشخیص بده که اگر برنامه روی سیستم نصب است مسیر اون چیه !
یه چیزایی از رجستر پیدا کردم ولی یه چیز مطمئن میخوام مثه یه api یا هر چیزی.
فکر میکنم کامران بود میخواست برنامه مشابه اینستال شیلد بسازه، شاید اون بتونه کمک کنه.
ممنون
نبی
فكرش رو بكن وقتي يه برنامه هيچ استانداردي رو رعايت نكنه
و تو جاهاي مشخص ريجستري مسيرش رو نزاره و نصب درست
و حسابي هم نداشته باشه قاعدتا نمي شه مسيرش رو پيدا كرد
مگر با سرچ كه اونم قطعي نيست

مگر اينكه بخواي مسير برنامه هاي اجرا شده كه هم اكنون باز است
رو پيدا كني كه اون يه بحث ديگه اي هست ( من بلد نيستم )
سلام
از پاسختون ممنونم .
اما اگه برنامه هاي خاصي مد نظر باشه چي .
مثلا ياهو ميسنجر !

ولي من فكر ميكنم راهي باشه. مثلا اگه به ليست برنامه هاي موجود در add/remove program دسترسي داشته باشيم شايد بشه كاري كرد...


نبي
ياهو كه خيلي خوب و استاندارد هست
اين دو سورس روبرسي كن قطعا به جواب مي رسي
يه ليست باكس بنداز رو فرم ؛ اينها رو هم كپي كن ؛ كارت حله :wink:

سورس 1 :

کد:
Private Const ERROR_NO_MORE_ITEMS = 259&
Private Const ERROR_SUCCESS = 0&

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_CONFIG = &H80000005
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_DYN_DATA = &H80000006
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long


Private Sub Form_Load()
  Dim hKey As Long, Num As Long
  Dim strName As String
  Dim Retval As Long
    
  Const Buffer As Long = 255
  Num = 0
  Retval = Buffer
  If RegOpenKey(HKEY_LOCAL_MACHINE, "Software", hKey) = 0 Then
     strName = Space(Buffer)
     While RegEnumKeyEx(hKey, Num, strName, Retval, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
        List1.AddItem Left$(strName, Retval)
        Num = Num + 1
        strName = Space(Buffer)
        Retval = Buffer
     Wend
     RegCloseKey hKey
  Else
     List1.AddItem "Error"
  End If
End Sub

سورس 2 :

کد:
Private Const ERROR_SUCCESS = 0&
Private Const ERROR_NO_MORE_ITEMS = 259&
Private Const HKEY_LOCAL_MACHINE = &H80000002

Private Const REG_BINARY = 3
Private Const REG_DWORD = 4
Private Const REG_EXPAND_SZ = 2
Private Const REG_SZ = 1

Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Sub Form_Load()
  Dim hKey As Long, num As Long, strName As String
  Dim strData As String, Retval As Long, RetvalData As Long

  Const Buffer As Long = 255
  Me.AutoRedraw = True
  num = 0
  strName = Space(Buffer)
  strData = Space(Buffer)
  Retval = Buffer
  RetvalData = Buffer
  If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Yahoo! Messenger", hKey) = 0 Then
    While RegEnumValue(hKey, num, strName, Retval, 0, ByVal 0&, ByVal strData, RetvalData) <> ERROR_NO_MORE_ITEMS
       If RetvalData > 0 Then
          List1.AddItem Left$(strName, Retval) + "  =  " + Left$(strData, RetvalData - 1)
       End If
       num = num + 1
       strName = Space(Buffer)
       strData = Space(Buffer)
       Retval = Buffer
       RetvalData = Buffer
    Wend
    RegCloseKey hKey
  Else
    List1.AddItem "Error"
  End If
End Sub

اگه حال نداشتي اينارو تو وي بي وارد كني بگو برات پروژه هاش رو آپلود كنم (‌چون من هم خودم اگه كسي بهم كد بده تمبليم مي شه بشينم سه ساعت تو وي بي واردش كنم ) Biggrin
سلام
اين مسير ها رو تو رجستر ديده بودم . پس براي ديگر برنامه ها هم بايد از همين روش استفاده كرد. ميخواستم مطمئن بشم راه استانداردي وجود نداره.

بسيار خب !
ار راهنمايي شما دوست عزيز بسيار سپاسگزارم .

نبي
سلام دوستان.
چه طوري ميشه كه مثلآ از همين مسيرهاي نرم افزارهاي نسب شده
يه وايت ليست درست كرد كه سيستم فقط نرم افزارهايي رو اجرا كنه كه
آدرسشون در اون وايت ليست هست و غير از اون هيچ فايل ديگه اي رو اجرا نكنه.

مثلآ تو وايت ليست آدرس ياهو مسنجرو بديم يا اسمشو سيستم فقط بتونه نرم افزار
ياهو مسنجرو باز كنه و به غير از اون نرم افزار ديگه اي باز نشه!

خيلي وقته دارم دنبال يه راه حل ميگردم ولي تاحالا هيچي دست گيرم نشده :cry:

كسي ميتونه كمكم كنه؟ :roll:
نبي جان قابلي نداشت
نمي دونم مشكلت حل شد يا نه ؟

آقا امين من منظورت رو نفهميدم
من تصميم دارم با وي بي نرم افزاري بنويسم كه تا وقتي در حال اجراست
سيستم فقط فايلهايي رو اجرا كنه كه تو سيستم نرم افزار تعريف شده
و به غير از اونها هيچ فايل اجرايي ديگه اي رو سيتم اجرا نكنه!

در واقع مي خوام يه ليستي ايجاد كنم كه توش آدرس برنامه ها داده ميشه و سيستم عاملو وادار ميكنه كه فقط نرم افزارهايي رو اجرا كنه كه آدرسشون توي اين ليست هست و به غير از اونا اجازه نده برنامه ي ديگه اي رو اجرا كنه!

توي اين وايت ليست به عنوان مثال آدرس فايل ويژوال بيسيكو من وارد ميكنم
به عنوان مثال:

D:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE

حالا ميخوام سيستم فقط بتونه فايل ويژوال بيسيك رو كه آدرسشو بهش دادم يا نرم افزارهاي ديگه رو كه آدرسشونو بهش مي دم اجازه داشته باشه اجرا كنه مثلآ اگه بخوام فتوشاپ يا حتي ماشين حساب ويندوز رو باز كنم نبايد بزاره اين كا رو بكنم!
(چون آدرسشون توي ليست من نيست)

منظورمو فهميدي؟ :?:
آره خيلي خوبم فهميدم

اين قضيه نياز داره كه يا بياي و كنترل اجراي برنامه ها رو به دست بگيري و اگه برنامه
اجرا شده با نام هاي مجاز برنامه ها يكي نبود اجاز ه باز شدن پيدا نكند
مثل زون الارم كه قبل از اجراي هر برنامه اي سوال براي اجازه كار كردن مي پرسه

يا

اگه بلد نيستي به طور مسخره اي پروسس ها رو با يك تايمر با مقدار خيلي كم چك كني
و اگه نامه پروسس خارج از نام برنامه هاي اجازه داده شده بود ان را ببندي

كه ما الان بايد روي گزينه 1 كار كنيم
اتفاقا موضوع بسيار جالبي هست و خودمم خيلي خوشحال مي شم اگه جوابش رو پيدا
كنم
من روش كار مي كنم ببينم به جايي مي رسم يا نه
دوستان هم دريغ نكن و جواب بدن
ممنون :roll: :wink:

توي يه جاي ديگه هم مطرح كرده بودم و يكي از دوستان لطف كرده بودن و گفته بودن:

فكر كنم بايد بري سراغ برنامه هاي كنترل پروسس بگردي
بعد يه ليست از برنامه هايي كه مجاز هستن رو تهيه كني و بقيه رو بكشي

يه دو سه ماهيه دارم روش كار ميكنم ولي تاحالا ندوتستم به جايي برسم :roll:
نه ما نمي خواهيم از روش پروسس بريم جلو چون حد اقل برنامه يك بار
باز مي شه و بعد مي تونيم اگه غير مجاز بود ببنديمش
ما اصلا مي خواهيم باز نشه
صفحه‌ها: 1 2