PDA

View Full Version : سوال: باز کردن یک فایل exe



علیرضا5
چهارشنبه 31 تیر 1394, 12:28 عصر
برای باز کردن یک فایل exe از کد
Shell "explorer E:\G\ghoran\ghoran.exe", vbNormalFocus
استفاده می کنم و جواب هم میده اما بعضی از فایلها رو نمی تونه باز کنه
آیا این کد رو بهتر از این یا به نوع دیگه میشه نوشت

isaac23
چهارشنبه 31 تیر 1394, 17:03 عصر
فایل رو کپی کن محلی که برنامه اجرا میشه و از دستور App.path استفاده بکن شاید را بیفته

علیرضا5
چهارشنبه 31 تیر 1394, 17:43 عصر
متاسفانه فرقی نکرد
دوستان دستور باز کردن یک فایل exe بجز shell چیه ؟

vbhamed
پنج شنبه 01 مرداد 1394, 08:49 صبح
سلام

باید مشکل کار رو پیدا کنید، اگر با این نشه با روشی دیگه هم احتمال زیاد نمیشه

Love_Program
پنج شنبه 01 مرداد 1394, 09:50 صبح
سلام
شاید با این کار مشکلتون حل بشه




Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Const SW_HIDE = 0
Private Const SW_MAXIMIZE = 3 'State
Private Const SW_MINIMIZE = 6
Private Const SW_RESTORE = 9
Private Const SW_SHOW = 5
Private Const SW_SHOWDEFAULT = 10
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNA = 8
Private Const SW_SHOWNOACTIVATE = 4
Private Const SW_SHOWNORMAL = 1

Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Private Const SE_ERR_ACCESSDENIED = 5 ' access denied
Private Const SE_ERR_ASSOCINCOMPLETE = 27
Private Const SE_ERR_DDEBUSY = 30
Private Const SE_ERR_DDEFAIL = 29
Private Const SE_ERR_DDETIMEOUT = 28
Private Const SE_ERR_DLLNOTFOUND = 32
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_OOM = 8 ' out of memory
Private Const SE_ERR_SHARE = 26

Private Const STYLE_NORMAL = 11

Public Sub cmdExecute(ByVal File As String)
Dim result As Long
result = ShellExecute(Print_FRM.hWnd, "open", File, "", "", SW_SHOWMAXIMIZED)
End Sub

علیرضا5
پنج شنبه 01 مرداد 1394, 22:36 عصر
دوست عزیر از کدی که نوشتی ممنونم ولی سر در نیاوردم اگه ممکنه به صورت سورس بگذارش



باید مشکل کار رو پیدا کنید، اگر با این نشه با روشی دیگه هم احتمال زیاد نمیشه
حامد جان شما درست میگی کد shell همه فایلهای exe رو باز میکنه مشکل من با یک بازی به نام gta_sa.exe هست و ویندوزم هم ویندوز8 شاید مشکل از ویندوزم باشه به هر حال باید تنظیماتی داشته باشه

pbm_soy
جمعه 02 مرداد 1394, 01:18 صبح
تو خود ویندوز این برنامه اجرا میشود اصلا؟!

علیرضا5
جمعه 02 مرداد 1394, 02:15 صبح
بله اجرا میشه

samiasoft
جمعه 02 مرداد 1394, 14:15 عصر
با کد زیر امتحان کنید. که برای مثال یه فایل پی دی اف رو باز میکنه.

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Function ShellX(PathName, Optional WindowStyle As VbAppWinStyle = vbNormalFocus, Optional sParameters$ = vbNullString) As Long
ShellX = ShellExecute(0, "open", PathName, sParameters$, App.Path, WindowStyle)
End Function


Private Sub Command1_Click()
ShellX App.Path & "\Help.pdf", vbMaximizedFocus
End Sub

علیرضا5
جمعه 02 مرداد 1394, 23:59 عصر
متاسفانه نشد
جالب اینه که بعد از اجرای برنامه فایل مورد نظرم در قسمت task manajer هم اجرا شده نشون میده ولی اجرا نمیشه

samiasoft
شنبه 03 مرداد 1394, 03:01 صبح
فایل موردنظری که میخوای اجرابشه رو درصورت امکان قرار بدید بررسی شود.

ایلیا آخوندزاده
سه شنبه 06 مرداد 1394, 21:42 عصر
از اونجایی که میگین تو تسک منیجر نشون میده من احتمال میدم به فوکوس ربط داشته باشه شما یبار vbnormalfocus رو حذف کنید و امتحان کنین.
موفق باشید

vbhamed
چهارشنبه 07 مرداد 1394, 00:46 صبح
سلام

1 - :
داخل عبارتی که جلوی Shell می‌نویسید Explorer رو نزارید چون خود فایل Exe رو دارید اجرا می‌کنید

2 - :
روش زیر رو امتحان کنید فقط قبلش از منوی Project گزینه References و سپس آیتم Microsoft Scripting Runtime رو تیک بزنید

Dim fn$, fso As New FileSystemObject, x As Drive

fn = "E:\G\ghoran\ghoran.exe"

ChDrive fso.GetDriveName(fn)
ChDir fso.GetParentFolderName(fn)

Shell fn, vbNormalFocus

دلیل این مشکل هم اینه که بعضی از برنامه ها موقع اجرا نیاز به فایلهایی دارند که اونها رو از مسیر جاری سیستم می‌خونن (در VB6 مسیر جاری با App.Path بدست میاد) ولی وقتی شما با برنامه دیگه ای قراره اون برنامه رو فراخوانی کنید ممکنه مسیر جاری سیستم مسیر همون برنامه نباشه مثلا شما قصد دارید از درون یک فایل exe که در درایو d قرار داره، فایل exe ای که در درایو e قرار داره رو اجرا کنید، در اینجا مسیر جاری \:D هست نه \:E و اگر فرضا برنامه‌ای که در درایو E قرار داره و باید اجرا بشه، با VB6 نوشته شده باشه اونموقع App.Path مسیر \:D رو برمی‌گردونه نه \:E

اگر دقت کنید Shortcut هایی که ویندوز برای برنامه ها میزاره هم گزینه ای تحت عنوان Start in داره، روی icon یک فایل exe روی دسکتاپ کلیک راست کنید و سپس گزینه Properties رو بزنید تا این گزینه رو ببینید، اونهم کارش اینه که ابتدا مسیر جاری سیستم رو به مسیر اون برنامه تغییر میده و بعد برنامه رو اجرا می‌کنه