PDA

View Full Version : آموزش: چگونه فایل های اجرایی خود را Portable کنیم! (بدون نیاز به نصاب)



M.T.P
شنبه 25 دی 1389, 20:28 عصر
با اجازه اساتید و مدیران محترم...

همین طور که همه عزیزان و برنامه نویسان ویژوال بیسیک 6 می دانند ، چنانچه در برنامه خود از یک کنترل اضافه یا همون ocx و یا احیانا از dll ها استفاده کرده باشیم و بخواهیم برنامه را در رایانه ای غیر از رایانه خود اجرا کنیم باید حتما قبلا ocx و یا dll مربوطه را در سیستم مقصد نصب و ریجیستر و سپس برنامه را اجرا کنیم.
علی رغم وجود برنامه های ساخت Setup چنانچه مایل هستید میتوانید فایل اجرایی خود را از Setup بی نیاز ساخته و این عملیات نصب رو به برنامه خود بسپریم.

اما چطور ممکن است.... !!

خب اگر شما در فرم Start up خود از یک ocx و یعنی یک کنترل غیر از کنترل های استاندارد vb6 استفاده کرده باشید و برنامه رو اجرا کنید ، چنانچه ocx شما از پیش نصب و یا ریجستر نشده باشد ، برنامه دچار خطای Run time میشه و کاربر رو از ادامه کار باز خواهدداشت.

همه برنامه نویسان vb6 میدونن که برنامه های vb6 در ابتدای کار می توانند به یکی از دو روش زیر اجرا شوند:
1. اجرای یک فرم به عنوان فرم Start up
2. فراخوانی روال Sub Main

در حالت Sub Main هیچ فرمی بدون در خواست ما باز نمیشه و در صورت عدم وجود ocx های استفاده شده در رایانه مقصد ، ما قادر هستیم به نصب این دسته از ocx ها بپردازیم.
ocx ها رو میتونیم تو Resource برنامه بزاریم و به پوشه System32 منتقل و سپس ریجیستر و در پایان کار فرم اصلی خود رو اجرا کنیم.

نمونه ای که در زیر قرار داده شده شامل موارد بالا هست که ocx واقع در Resource اون comctl32.ocx هست که اکثر دوستان باهاش آشنایی دارن سری Microsoft common controls 5.0 که شامل Listview ، Treeview و StatusBar و ... میباشد.

برای تست این موضوع خواهشمندم قبل از باز کردن پروژه زیر در محیط vb6 :
*. فایل اجرایی کامپایل شده آن را یک مرتبه اجرا کنید و کنترل های TabStrip و ... رو روی فرم مشاهده کنید و سپس برنامه رو ببنید.
*. حالا فایل ocx این کنترل ها که همون comctl32.ocx هست رو از پوشه C:\Windows\System32 حذف کرده و مجدد فایل کامپایل شده در ضمیمه رو اجرا کنید.( این بار برنامه ابتدا شروع به نصب comctl32.ocx میکند و سپس فرم اصلی را اجرا خواهد کرد.

موفق باشید.

ali190
شنبه 25 دی 1389, 22:59 عصر
سلام
ممنون از آموزش خوبتون
شما در واقع اون اكتيوايكس رو در قسمت Resource قرار داديد و در واقع اون اكتيوايكس رو جزئي از برنامه كرديد
ميشه توضيح بديد كه چطور ميشه در vb6 فايل Resource ساخت و اكتيوايكس ها و ... رو در دل خود پروژه جا داد؟
بازهم به خطر آموزش خوبتون ممنونم
ياعلي

Slytherin
یک شنبه 26 دی 1389, 01:16 صبح
راه های دیگری هم هست، من همیشه برای اینکه برنامه هام رو پرتابل کنم از WinRar استفاده می کنم.

محسن واژدی
یک شنبه 26 دی 1389, 08:32 صبح
سلام
ممنون از آموزش خوبتون
شما در واقع اون اكتيوايكس رو در قسمت Resource قرار داديد و در واقع اون اكتيوايكس رو جزئي از برنامه كرديد
ميشه توضيح بديد كه چطور ميشه در vb6 فايل Resource ساخت و اكتيوايكس ها و ... رو در دل خود پروژه جا داد؟
بازهم به خطر آموزش خبتون ممنونم
ياعلي


روش استفاده از Resource ها در vb6

ابتدا از منوی Add-Ins گزینه Add-In manager را انتخاب کنین. بعد در پنجره باز شده گزینه VB 6 resource Editor رو انتخاب کنین و اون چند قسمتی که داخل تصویر زیر مشخص شده رو روشن کنین. در این صورت آیکون Resource Editor (آیکون سبز رنگ) به پروژه Toolbar محیط کار vb اضافه میشه. حالا بر روی آیکون VB Resource Editor کلیک کنید تا فرم ویرایشگرش بازبشه، که برای اضافه کردن فایل ریسورس جدید ، بر روی گزینه Add Custom Resource کلیک کنین و پس از انتخاب فایل مورد نظر تغییرات را حتما ذخیره کنی

حالا اگه پروژه را کامپایل کنین فایل ریسورس در کنار فایل اجرایی در قالب یک فایل exe ایجاد میشه . اما برای استخراج فایل ریسورس باید اونو توسط دستور LoadResData فراخوانی کنید و در قالب یک فایل Binary ذخیره کنید .



65136


مثال :

Dim my_data() As Byte

my_data = LoadResData(110, "CUSTOM")

Open App.Path & "\MyResource.dll" For Binary As #1

Put 1, , my_data()

Close #1
اگه دستور بالا اجرا بشه دیتاها (که من در اینجا اونا رو یه فایل DLL فرض کرده ام) در کنار فایل پروژه (یا ویندوز) ذخیره میشن

اون 110 که داخل دستور LoadResData نوشته شده هم شماره ID دیتاهاست داخل ویرایشگر ریسورس و اون " CUSTOM" نوشته شده هم نام دسته ای هست که داخل ویرایشگر ریسورس دیتاهامون داخل ذخیره شده.

موفق باشید

محسن واژدی
یک شنبه 26 دی 1389, 08:38 صبح
راه های دیگری هم هست، من همیشه برای اینکه برنامه هام رو پرتابل کنم از WinRar استفاده می کنم.

البته هم WinRAR و هم یه برنامه دیگه ای بنام "Thinstall Virtualization Suite" هست که تخصصش پرتابل سازی هست

موفق باشید

ali190
یک شنبه 26 دی 1389, 19:55 عصر
سلام
براي اينكه برداشتم از اين قضيه رو تكيمل تر بشه يه سئوال در اين راستا ميپرسم
مثلاً من ميتونم يك فايل mp3 يا فيلم رو در ريسورس برنامه ام جا كنم و اين فايل در دل خود فايل exe من ذخيره بشه و اين قابليت وجود داشته باشه تا هر وقت خواستم اين فايل صوتي يا تصويري رو از دل خود پروژه exe ام اجرا كنم ؟

Slytherin
یک شنبه 26 دی 1389, 20:20 عصر
سلام
براي اينكه برداشتم از اين قضيه رو تكيمل تر بشه يه سئوال در اين راستا ميپرسم
مثلاً من ميتونم يك فايل mp3 يا فيلم رو در ريسورس برنامه ام جا كنم و اين فايل در دل خود فايل exe من ذخيره بشه و اين قابليت وجود داشته باشه تا هر وقت خواستم اين فايل صوتي يا تصويري رو از دل خود پروژه exe ام اجرا كنم ؟

بله امکانپذیر است.

ali190
یک شنبه 26 دی 1389, 21:57 عصر
ميشه يك نمونه از اين كار در اينجا قرار دهيد؟
البته براي آموزش
ممنون و متشكر
ياعلي

محسن واژدی
سه شنبه 28 دی 1389, 08:25 صبح
با دستورات زیر نیز میتوانید یک فایل را مستقیما از ریسورس اجرا کنید




Option Explicit

Private Const SND_ASYNC As Long = &H1

Private Const SND_MEMORY As Long = &H4

Private Const SND_NODEFAULT = &H2

Private Const Flags& = SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _

ByVal uFlags As Long) As Long

Private Sub Command1_Click()


Dim b As String

b = StrConv(LoadResData(101, "custom"), vbUnicode)

sndPlaySound b, Flags&

End Sub

کافیه که ID فایل صوتی رو جایگزین "101" در دستورات کنید

یاعلی

ali190
سه شنبه 28 دی 1389, 19:16 عصر
سلام
تست كردم
منتها جوابي نگرفتم

SlowCode
دوشنبه 04 بهمن 1389, 19:50 عصر
البته هم WinRAR و هم یه برنامه دیگه ای بنام "Thinstall Virtualization Suite" هست که تخصصش پرتابل سازی هست

موفق باشید
آقا محسن من این برنامه رو دارم اما نمی دونم چطور ازش استفاده کنم میشه راهنماییم کنید؟

Nima NT
دوشنبه 04 بهمن 1389, 20:21 عصر
آقا محسن من این برنامه رو دارم اما نمی دونم چطور ازش استفاده کنم میشه راهنماییم کنید؟
از این برنامه استفاده نکنید چون شاید کارتون رو راه بندازه ولی امنیت مناسبی برای Virtual کردن فایلها نداره.

SlowCode
دوشنبه 04 بهمن 1389, 23:47 عصر
خوب به نظر شما از چه برنامه ای استفاده کنم؟

Nima NT
سه شنبه 05 بهمن 1389, 01:55 صبح
برای Virtual کردن فایل به نظر من برنامه پروتکتور Enigma گزینه بدی نیست ولی به این شرط که نسخه اصلی اون رو خریداری کنید چون اکثر نسخه های کرک شده اون این بخششون ناقص هست تا حدی و مشکلات زیادی برای کاربر نهایی ایجاد میکنه ولی در کل امنیت خوبی داره.

محسن واژدی
سه شنبه 26 بهمن 1389, 11:02 صبح
از این برنامه استفاده نکنید چون شاید کارتون رو راه بندازه ولی امنیت مناسبی برای Virtual کردن فایلها نداره.
درسته که امنیتش زیاد نیست اما برا پرتابل کردن حداقل برنامه هایی که میخواین اونا رو در جاهایی که امکان دسترسی به ای نبرنامه نیست مفید هست
اگر دقت کرده باشید بسیاری از برنامه ها نظیر WinRARPortable یا IDM Portable با این نرم افزار پرتابل شده اند اما همانطور که فرمودین این برنامه برای پرتابل سازی برنامه های شخصی به هیچ وجه پیشنهاد نمیشود


آقا محسن من این برنامه رو دارم اما نمی دونم چطور ازش استفاده کنم میشه راهنماییم کنید؟

ببخشید دیر نگاش کردم
برای پرتابل سازی VB6 به این روش عمل کنین:


فایل "Setup Capture.exe" را اجرا کنین
دکمه Start را فشار بدهید
درایوی را که میخواهید vb رو در اون نصب کنید را انتخاب کنید
در پایین هم بزارین همه کلیدهای ریجیستری انتخاب باشه (مخصوصا کلید HKCR که کلاس های وی بی در اونجا ذخیره میشن)
روی دکمه "Pre-Install Scan >>" فشار بدین تا عملیات Capture آغاز بشه
وقتی تموم شد وی بی رو در همون درایو مشخص شده نصب کنین
بعد از نصب وی بی مجددا به برنامه برگشته و کلید "Post-Install Scan >>" رو فشار بدین
در صفحه بعد فایل vb6.exe ر. پیدا و تیک دار کنین
رو دکمه Continue >> کلیک کنید
مسیر ذخیره رو مشخص کنید و روی دکمه Save Results >> کلیک کنید
برنامه رو بسته و به محل ذخیره فایل ها برین
یه فایل رو پیدا میکنین با نام "build.bat" اونو اجرا کنین تا برنامه Portable بشه

موفق باشید

kuh_nur
سه شنبه 26 بهمن 1389, 20:09 عصر
ببخشید من یه سوال برام پیش اومد ایا امکان داره که فایل رو در زمان اجرا به resourse اضافه کرد.

محسن واژدی
پنج شنبه 28 بهمن 1389, 13:22 عصر
ببخشید من یه سوال برام پیش اومد ایا امکان داره که فایل رو در زمان اجرا به resourse اضافه کرد.

دقیقا متوجه منظورتون نشدم، یعنی میخواین فایلی را در زمان اجرا به Resource برنامه پرتابل شده تون اضافه کنین، کمی بیشتر توضیح بدین

R2du-soft
شنبه 17 تیر 1391, 21:50 عصر
با دستور shell نمیشه فایل Resource رو اجرا کرد؟
میخوام یه دکمه بزارم و کاری کنم که وقتی روش کلیک کردم این فایلی که درون Resource هست اجرا بشه

راستی فایلی که درون ریسورس هست هم bat هست :لبخند:

ممنون

arenaw
شنبه 17 تیر 1391, 22:04 عصر
میتونی اول فایل ریسورس رو سیو کنی، بعد اون فایل سیو شده رو اجرا کنی
اینجوری:

Dim ResData() As Byte, FilePath As String
ResData = LoadResData(101, "CUSTOM")
FilePath = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") & "myfile.bat"
Open FilePath For Binary As #1
Put #1, , ResData
Close #1
Shell FilePath

R2du-soft
شنبه 17 تیر 1391, 22:28 عصر
مرسی arenaw (http://barnamenevis.org/member.php?203395-arenaw) جان
میشه کاری کرد که وقتی فایل myfile.bat میخواد اجرا بشه جایی کپی نشه؟
متغیر درایو ویندوز چیه؟ توی داس %homedrive% هست ، تو ویژوال چیه؟
مرسی

محسن واژدی
شنبه 17 تیر 1391, 22:47 عصر
میشه کاری کرد که وقتی فایل myfile.bat میخواد اجرا بشه جایی کپی نشه؟
سلام
میتوانیم در حین/یا پس از اجرای فایل Bat آنرا حذف کنید (البته اگر قصد فقط یکبار اجرای آنرا دارد) و یا دستور حذف فایل را در کدهای فایل بنویسید برای مثال "del test.bat"


متغیر درایو ویندوز چیه؟ توی داس %homedrive% هست ، تو ویژوال چیه؟
در وی بی

Private Sub Command1_Click()
MsgBox Environ("homedrive")
End Sub


موفق باشید

arenaw
شنبه 17 تیر 1391, 22:53 عصر
فکر نمیکنم (ولی باز جست و جو کن شاید بشه)
ولی میتونی از مسیر Temp ویندوز استفاده کنی که همین کاربرد هارو داره

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Const MAX_PATH = 260
Private Function TempPath()
Dim sFolder As String ' Name of the folder
Dim lRet As Long ' Return Value
sFolder = String(260&, 0)
lRet = GetTempPath(260&, sFolder)
If lRet <> 0 Then
TempPath = Left(sFolder, InStr(sFolder, Chr(0)) - 1)
Else
TempPath = vbNullString
End If
End Function


اینارو تو مادول کپی کن ، بعد هر جا نیاز به آدرس تمپ بود بنویس TempPath ، مثلا : a = TempPath & "myfile.bat"

R2du-soft
شنبه 17 تیر 1391, 22:56 عصر
خیلی معظرت میخوام که اینقدر با سوالام اذیتتون میکنم
یه سوال دیگه
توی کد زیر چطوری باید بگم که فایل myfile.bat جایی بجز کنار فایل Exe اجرا بشه؟ هرکاری کردم نشد!!!
مثلا میخوام توی درایو ویندوز توی پوشه Program Files ساخته بشه بعد اجرا بشه و سپس پاک بشه


Dim ResData() As Byte, FilePath As String
ResData = LoadResData(101, "CUSTOM")
FilePath = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") & "myfile.bat"
Open FilePath For Binary As #1
Put #1, , ResData
Close #1
Shell FilePath




مرسی
:قلب:

محسن واژدی
شنبه 17 تیر 1391, 23:01 عصر
خیلی معظرت میخوام که اینقدر با سوالام اذیتتون میکنم
یه سوال دیگه
توی کد زیر چطوری باید بگم که فایل myfile.bat جایی بجز کنار فایل Exe اجرا بشه؟ هرکاری کردم نشد!!!
مثلا میخوام توی درایو ویندوز توی پوشه Program Files ساخته بشه بعد اجرا بشه و سپس پاک بشه


Dim ResData() As Byte, FilePath As String
ResData = LoadResData(101, "CUSTOM")
FilePath = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") & "myfile.bat"
Open FilePath For Binary As #1
Put #1, , ResData
Close #1
Shell FilePath




مرسی
:قلب:

با اجازه arenaw عزیز، مسیر جدید را جایگزین FilePath میکنیم:
البته با Environ هم میتوانیم مسیر های کلیدی ویندوز را بدست آوریم


Dim ResData() As Byte, FilePath As String
ResData = LoadResData(101, "CUSTOM")
FilePath = Environ("tmp") & "\myfile.bat"
Open FilePath For Binary As #1
Put #1, , ResData
Close #1
Shell FilePath

نکته دیگر هم با Shell تنها میتوانیم فایل های Stand-Alone مانند exe را مستقلا اجرا کنیم
برای اجرای فایل Bat هم میتوانیم از تابع Shell (بصورت زیر) و هم از APIی ShellExecute استفاده کنیم

Shell

Private Sub Command1_Click()
Dim sBF$
sBF$ = "C:\test.bat"
Shell "cmd /c """ & sBF$ & """" ', vbHide
End Subمسیر فایل را جایگزین مقدار sBF کنید

ShellExecute
http://barnamenevis.org/showthread.php?337376&p=1488343&viewfull=1#post1488343

موفق باشید

R2du-soft
شنبه 17 تیر 1391, 23:15 عصر
1 دنیا ممنون
واقعا حال کردم با این سایت و کاربراش
و خوشحالم که دوستای خیلی خیلی خیلی عالی هم پیدا کردم
واقعا ممنون
همیشه دعاتون میکنم
:قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب:
:قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب:

R2du-soft
پنج شنبه 22 تیر 1391, 22:59 عصر
سلام زمانی که از Resource خود ویژوال بیسیک استفاده میکنم و یک فایل رو درون فایل exe ویژوال بیسیک میکنم، آنتی ویروس بهش گیر میده و فایل exe ساخته شده رو ویروسی میشناسه میشه کاری کرد که این اتفاق نیوفته؟ مرسی

R2du-soft
شنبه 24 تیر 1391, 21:38 عصر
چطور میشه یه فایل exe که در ریسورس با اسم 105 هست رو در مسیر و اسم c:\file.exe کپی کرد؟

با تشکر از همه عزیزان

بهروز عباسی
شنبه 24 تیر 1391, 22:02 عصر
درود
با این تابع می تونی
Public Sub RES_Extract(ID_Ressource As String, Typ_Ressource As String, FileName As String)
Dim sType As String
Dim lFile As Long
Dim lID As Long
Dim Mt() As Byte
On Error Resume Next
lFile = FreeFile
Open FileName For Binary As #lFile
lID = CLng(ID_Ressource)
sType = Typ_Ressource
Mt = LoadResData(lID, sType)
Put #lFile, , Mt()
Close #lFile
End Sub

اگه نشد ببخشید vb ندارم(توی کازه کوزه های قدیم بود:لبخند:)

موفق باشید.

R2du-soft
شنبه 24 تیر 1391, 22:20 عصر
بهروز جان کجای این کد باید آیدی فایل ریسورسم و کجاش مسیری که میخوام فایل کپی شه رو بگم؟
مگه نمیدونی که من تازه کارم !!!!!! :متفکر: :لبخند:
راستی نمیخوام فایلم اجرا بشه ها!! فقط میخوام توی مسیری که گفته شده کپی کنه

سید حمید حق پرست
شنبه 24 تیر 1391, 22:38 عصر
سلام علیکم
دوست عزیز چند روز قبل بنده فیلم اموزشیشو گزاشتم . کامل واضحه و توضیح داده ام . تاپیک :
http://barnamenevis.org/showthread.php?350647-%D9%81%DB%8C%D9%84%D9%85-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%B1%D8%AA%D8%A7%D8%A8%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D9%BE%D8%B1%D9%88%DA%98%D9%87-vb6-%28%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA%D 9%87%D8%A7%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B1%DB%8C%D8%B3%D9%88%D8%B1%D8%B3-%D9%88-%D8%B1%D8%AC%D8%B3%D8%AA%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A2%D9%86%D9%87%D8%A7%29

موفق باشید


یا علی (ع)

محسن واژدی
شنبه 24 تیر 1391, 22:44 عصر
بهروز جان کجای این کد باید آیدی فایل ریسورسم و کجاش مسیری که میخوام فایل کپی شه رو بگم؟
مگه نمیدونی که من تازه کارم !!!!!! :متفکر: :لبخند:
راستی نمیخوام فایلم اجرا بشه ها!! فقط میخوام توی مسیری که گفته شده کپی کنه

سلام علیکم
بااجازه دوستان
کدی که آقای عباسی زحمت کشیدند، یک روال است و مشابه نمونه زیر بایستی از آن استفاده شود (البته صرفا فایل استخراج میشود):
Private Sub Command1_Click()
Call RES_Extract("105", "CUSTOM", "c:\file.exe")
End Sub

روال را هم بهتر است بمنظور دسترسی عمومی در ماژول کد کپی کنید

فایل آموزشی که آقای حق پرست زحمت کشیدند را دنبال کنید بهتر متوجه میشوید

موفق باشید

سید حمید حق پرست
شنبه 24 تیر 1391, 22:48 عصر
با اجازه ای اقای واژدی
این روش هم هست :

On Error Resume Next
Dim Pachocx As String
Dim ocxArray() As Byte
Dim BN As Integer
Pachocx = "C:\file.exe"
DoEvents
ocxArray = LoadResData(101, "CUSTOM")
BN = FreeFile
Open Pachocx For Binary Access Write As #BN
Put #BN, , ocxArray
Close #BN
همون روشی که در فیلم توضیح داده ام

موفق باشید


یا علی (ع)

بهروز عباسی
یک شنبه 25 تیر 1391, 20:10 عصر
درود به همه
متاسفانه من محدودیت دانلود دارم نتونستم فیلم رو بگیرم.
اما اگه قراره کل برنامه با Vb نوشته و پرتیبل بشه ممکنه در بعضی سیستم ها به خاطر نداشتن اون Dll معروف vb برنامه اجرا نشه و کلاً بهتره اگه برنامه رو بوسیله ریسورس پرتیبل کردید اون dll رو با Winrar یا ... به برنامه الحاق کنید.

امید وارم درست گفته باشم چون تست نکردم اما برنامه های VB5 رو دیدم که به خاطر نبودن فایل مذکور روی Win7 اجرا نمیشن.

موفق باشید

Rain_Saeid
جمعه 14 مهر 1391, 13:45 عصر
با دستورات زیر نیز میتوانید یک فایل را مستقیما از ریسورس اجرا کنید




Option Explicit

Private Const SND_ASYNC As Long = &H1

Private Const SND_MEMORY As Long = &H4

Private Const SND_NODEFAULT = &H2

Private Const Flags& = SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _

ByVal uFlags As Long) As Long

Private Sub Command1_Click()


Dim b As String

b = StrConv(LoadResData(101, "custom"), vbUnicode)

sndPlaySound b, Flags&

End Sub

کافیه که ID فایل صوتی رو جایگزین "101" در دستورات کنید

یاعلی

با سلام و درود

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

ممنون میشم راهنمایی بفرمایید

elham99
سه شنبه 24 بهمن 1391, 11:29 صبح
سلام دوستان من از Enigma Pretoctor استفاده میکردم windows عوض کردم حالا Protect میشه ولی وقتی RUN میزنم ارور میده میگه یرنامه شما با مشکل مواحه شده و باید بسته بشه:گیج:

amiralex
سه شنبه 24 بهمن 1391, 15:08 عصر
سلام به همه

در راستاي صحبت هاي دوستان يه سوالي در همين زمينه دارم

فرض كنيد كه اگه بخوايم يه برنامه رو پرتابل كنيم ( يه برنامه VB6) و بخوايم اونو تو سيستمي اجرا كنيم كه TC هست (از اين دستگاه هايي كوچكي كه معمولا پشت مانيتور قرار ميدن و در سازمانها ازش استفاده ميكنن و ويندوز رو از سروري ميخونه) بعبارتي يه سيتمي هست كه از ويندوز سروري كه در شبكه وجود داره و چندين سيستم TC ديگه با يوزرنيم هاي مختلف بهش وصل ميشن رو بخوايم اون برنامه VB رو اجرا كنيم چطور امكان پذيره؟

من با همين برنامه هايي كه دوستان نام بردند و چندين مورد ديگه خودم تو اينترنت پيدا كردم اقدام به پرتابل سازي كردم اما فقط يك يا دو فرمم اجرا ميشه تعداد زيادي از فرما اجرا نميشن. و خطايي در رجيستر كردن يك Ocx كه در واقع Vsflxgrid هست و يكي دو مورد ديگه رو ميگيره. در حالي كه من اون Ocxها رو هم در فرآيند پرتابل سازي قرار ميدم و حتي در كنار فايل اجرايي ميذارم ولي باز هم ارور ميده.
سيستم ويندوز در حالت غير ادمين اجرا ميشه بعبارتي Limit هستند

از دوستان يه راهنمايي ميخواستم

متشكر و سپاسگذار

mehran901
سه شنبه 24 بهمن 1391, 15:31 عصر
ببخشید من یه سوال برام پیش اومد ایا امکان داره که فایل رو در زمان اجرا به resourse اضافه کرد.

بله امکان داره ، فقط نحوه کار فرق میکنه ، به این صورت که ابتدا فایل اجرایی که قصل الحاقش دارین روباید بخونین ، در یک متغییر variant بریزین (البته قبلش باید این متغییر را با اندازه حجم برنامه از فضای خالی پر کنید ) ، حالا یک new property از جنس property bag میسازین و اطلاعات متغییر هاتون رو داخل اون میریزین ،( علتش اینه که چندین و چند فایل رو به راحتی می تونید داخل پروپرتی بگ بریزید و اون رو یجا آخر فایل خودتون بنویسید ) ، بعد با استفاده از eof o lof آخر فایل اجرایی خودتون رو پیدا کنید(البته ترجیحا بیاین از ی فایل اگزه واسط استفاده کنین !) با دستور seek به چند آدرس بعدش برید و اطلاعات پروپرتی بگ رو اونجا بنویسین ولی

بعدش که بخواین به اون اطلاعات دسترسی داشته باشین همه یکپارچه میشن ، واسه تشخیص محل شروع شدن پروپرتی بگ ، قبل از نوشتن پروپرتی بگ رو فایل ، اندازه فایل داده های رو به دست بیارین و بعد از نتوشتن پروپرتی بگ اونو در آخر فایل اضافه کنین ، موقعی که برنامه باز میشه به آخر فایل رفته و با خوندن اون اندازه (من به عدد سه رقمی همیشه برمیخورم ) میتونید محل پروپرتی بگ رو پیدا کنین و اطلاعات باینری رو ازش برگردونین ( با استفاده از آیدی که موقع ثبت اطلاعات باینری هر فایل میدین ) و بعدشم بهراحتی تو ی فایل باینری جدید اطلاعات رو روی هارد مینویسین .... به همین سادگی

( این مکانیزم برنامه های بایندر هست که در حالت ران تایم اطلاعات به خودشون اضافه می کنن ، واسه این که فایل اگزه ای که در حال اجرا هست ، روش تغییراتی بدین یکی از راه هاش استفاده از ی اگره واسط دیگه هست که از قبل توسط برنامه اصلیتون ریسورس شده و بعد از اکسترکت اطلاعات رو از طریق مثلا خط فرمان از برنامه اصلیتون بگیره و اون کا ها رو روی برنامه اصلی انجام بده ....)

amiralex
شنبه 28 بهمن 1391, 09:16 صبح
ببخشيد دوباره اين پست رو بالا آوردم.

چون به جواب سوالم نرسيدم و از دوستان راهنمايي در اين مورد نكردن كمك خواستم. پست 36 رو عرض ميكنم

ممنون ميشم يه راهنمائي بكنيد