PDA

View Full Version : چندتا سوال مرتبت با برنامه در حال اجرا



xrezax
یک شنبه 27 شهریور 1390, 17:16 عصر
یه برنامه ساختم 90% کارش تموم شده اما یه چندتا مشکل داره که اینجا مطرح می کنم تا دوستان کمک کنن حل بشه :قلب:

1) می خوام وقتی برنامم اجرا بشه یعنی کاربر روی آیکن برنامه کلیک کنه تنها یک بار اجرا بشه و از اجرای مجدد خوداری بشه. مثلاً اگه کاربر خواست 5 تا از برنامم همزمان اجرا کنه فقط یکش اجرا بشه و باقی بسته بشه.

2) می خوام وقتی برنامم اجرا شد اونو توی درایو مثلا D کپی کنم و برنامم را از درایو D اجرا کنم و برنامه اصلی خارج بشه. ( با دستور کپی توی D گذاشتم اما باقیشو گیر کردم)

3) برنامم چک کنه که اگر توی درایو D نبود خودشو کپی کنه.

محسن واژدی
یک شنبه 27 شهریور 1390, 17:42 عصر
سلام


1) می خوام وقتی برنامم اجرا بشه یعنی کاربر روی آیکن برنامه کلیک کنه تنها یک بار اجرا بشه و از اجرای مجدد خوداری بشه. مثلاً اگه کاربر خواست 5 تا از برنامم همزمان اجرا کنه فقط یکش اجرا بشه و باقی بسته بشه.

از دستور زیر در استفاده کنید:

If App.PrevInstance = True Then
MsgBox "Already actived!", vbExclamation
End
End If




2) می خوام وقتی برنامم اجرا شد اونو توی درایو مثلا D کپی کنم و برنامم را از درایو D اجرا کنم و برنامه اصلی خارج بشه. ( با دستور کپی توی D گذاشتم اما باقیشو گیر کردم)

دستور زیر:

FileCopy App.Path & "\" & App.EXEName & ".exe", "D:\" & App.EXEName & ".exe"
Shell "D:\" & App.EXEName & ".exe"
End




3) برنامم چک کنه که اگر توی درایو D نبود خودشو کپی کنه.

میتوانید از تابع Dir استفاده کنید:

If Dir("d:\file.exe") = "" Then
'copy commands
End If


موفق باشید

xrezax
یک شنبه 27 شهریور 1390, 18:02 عصر
مرسی از کمک های خوبتون

جواب سوال 2 بنده که دادین خوب بود اما یک مشکلی داشت اونم اینه که اگر برنامه توی درایو D کپی بشه و یکی دیگه در درایو E کپی بشه کاربر می تونه 2 بار اجراش کنه. من می خوام اگر در هر جایی کاربر کپیش کرد تنها یکی براش اجرا بشه.

جواب سوال 3 بازم مرسی خوب بود. اما باز مشکل داشت اونم این بود که هر بار برنامه اجرا بشه خودشو کپی می کنه و خارج میشه و run time هم می زنه

محسن واژدی
یک شنبه 27 شهریور 1390, 18:18 عصر
جواب سوال 2 بنده که دادین خوب بود اما یک مشکلی داشت اونم اینه که اگر برنامه توی درایو D کپی بشه و یکی دیگه در درایو E کپی بشه کاربر می تونه 2 بار اجراش کنه. من می خوام اگر در هر جایی کاربر کپیش کرد تنها یکی براش اجرا بشه.

برای جلوگیری از این مورد دستور زیر را بررسی کنید:

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Const ERROR_ALREADY_EXISTS = 183&
Private Sub Form_Load()
Dim hmt&
hmt = CreateMutex(ByVal 0&, 1, App.Title)

If Err.LastDllError = ERROR_ALREADY_EXISTS Then
MsgBox "Already actived!", vbExclamation
ReleaseMutex hmt
CloseHandle hmt
End
End If
End Sub




جواب سوال 3 بازم مرسی خوب بود. اما باز مشکل داشت اونم این بود که هر بار برنامه اجرا بشه خودشو کپی می کنه و خارج میشه و run time هم می زنه

احتمالا" مسیر برنامه تون را جایگزین "d:\file.exe" نکرده اید، میتوانید از APIی PathFileExists هم برای بررسی موجودیت فایل استفاده کنید،

موفق باشید

xrezax
یک شنبه 27 شهریور 1390, 18:31 عصر
احتمالا" مسیر برنامه تون را جایگزین "d:\file.exe" نکرده اید، میتوانید از APIی PathFileExists هم برای بررسی موجودیت فایل استفاده کنید،

موفق باشید[/QUOTE]

دمت گرم اکی شد. اگه واسه اینم سورس بزاری ممنونت میشم :قلب:

محسن واژدی
یک شنبه 27 شهریور 1390, 18:42 عصر
نمونه PathFileExists

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Private Sub Command1_Click()
If CBool(PathFileExists("d:\file.exe")) = False Then
'copy commands
End If
End Sub



موفق باشید