چطور می شه یه فایل exe رو به یه فایل دیگه bind کرد، بطوریکه با باز کردنه فایل bind شده، هر دو برنامه باز شه؟
لطف کنین با VB.NET باشه.
می دونم سوالم تکراریه
ولی هیچ کجا جواب درست و حسابی ندیدم
Printable View
چطور می شه یه فایل exe رو به یه فایل دیگه bind کرد، بطوریکه با باز کردنه فایل bind شده، هر دو برنامه باز شه؟
لطف کنین با VB.NET باشه.
می دونم سوالم تکراریه
ولی هیچ کجا جواب درست و حسابی ندیدم
سلام
اگر exe دوم که باید با exe اول اجرا شود در بیرون و کنار exe اول قرار دارد میتوانید دستور زیر را در exe اول بدهید:
در غیر این صورت و اگر exe دوم باید embedded داخل exe اول باشد، اگر تحت framework.net باشد میتوان از همان داخل اجرایش کرد و گرنه حتماً باید در مسیر موقتی در هارد extract شود و با اصلاح همان دستور فوق اجرا شود.کد:System.Diagnostics.Process.Start(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "exe2.exe"))
موفق باشید.
دوست من،_h2_، از راهنماییت ممنونم
امتحانش می کنم
شاید من نتونستم منظورم رو درست برسونم
من می خوام مستقیما برنامه ای رو به یه فایل exe بچسبونم و در نهایت یک فایل با نام new name.exe داشته باشم
که اگه من new name.exe رو در هر کجا به صورت مستقل اجرا کردم، هر دو برنامه اجرا بشن.
از الگوریتم Extract هم نمی خوام استفاده کنم
کدی که شما گذاشتین از تابع start برای باز کردنه یه برنامه استفاده می کنه !!!!!
من با کد زیر می تونم محتویات فایل اول رو به انتهای فایل دوم اضافه کنم
ولی با اجرای فایل دوم، فایل اول دیگه اجرا نمی شه
کد:Dim byt() As Byte
byt = My.Computer.FileSystem.ReadAllBytes("C:\file1.exe")
My.Computer.FileSystem.WriteAllBytes("c:\file2.exe", byt, True)
سلام
1) اگر چیزی شبیه ویروسها میخواهید بسازید که در رایانه بچرخد و به هر چیزی بچسبد، متاسفم من نمیتوانم کمکتان کنم، شاید دوستان دیگر ...نقل قول:
من با کد زیر می تونم محتویات فایل اول رو به انتهای فایل دوم اضافه کنم
اگر میخواهید با عرف معمول یک exe را درون دیگری جای دهید و اجرا کنید، میتوانیم بحث کنیم!
همانطور که قبلاً گفتم دو حالت یا exe دومی شما مدیریت شده و تحت دات نت است ویا native است.
2) اگر مدیریت شده و دات نتی باشد، میتوان انرا یکراست در RAM لود و اجرا کرد.
3) اگر مدیریت شده نباشد و Native باشد، باید قبل از اجرا آن را در هارد و به صورت موقت Extract کنید و بعد از پایان کار میتوانید حذفش کنید.
1) یا 2) یا 3) ؟؟؟
لطف کنین در مورد 2 توضیح بیشتر بدین
چطور می شه یه برنامه رو مستقیما توو ram اجرا کرد؟
سلام
1)
شما میتوانید هر فایلی را در داخل exe یا dll خود جای دهید.
Project->AddExistingItem
فایل جدید اضافه شده را در SolutionExplorer انتخاب کنید و در پنجره Properties
Build Action = Embedded Resource
فایل داخل exe یا dll شما قرار گرفت.
2)
سپس میتواند در کد runtime با دستور زیر کل فایل را در buffer لود کنید:
کد:Dim buffer() As Byte
Using mem As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream("ProjectName.Filename.extension")
buffer = New Byte(CInt(mem.Length)) {}
mem.Read(buffer, 0, buffer.Length)
End Using
3)
اگر این فایل exe یا dll مدیریت شده باشد میتوانید با دستور زیر لودش کنید
4)کد:Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.Load(buffer)
در نهایت اگر exe باشد میتوانید با دستور زیر اجرایش کنید.
کد:Dim thread As New System.Threading.Thread(AddressOf EXEC)
thread.TrySetApartmentState(System.Threading.ApartmentState.STA)
thread.Start(asm.EntryPoint)
'...
Private Sub EXEC(ByVal objmain As Object)
Dim main As System.Reflection.MethodBase = DirectCast(objmain, System.Reflection.MethodBase)
Dim params() As System.Reflection.ParameterInfo = main.GetParameters
If (params Is Nothing) OrElse (params.Length <= 0) Then
main.Invoke(Nothing, New Object() {})
ElseIf (params.Length = 1) Then
main.Invoke(Nothing, New Object() {Nothing})
End If
End Sub
از راهنماییت ممنونم
ببینم چیکار می تونم بکنم !!!
H2 ی عزیز
من تونستم از کد شماره 2 به صورت زیر استفاده کنم
کد:Dim buffer() As Byte
Using mem As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream("WindowsApplication1.romper.exe")
buffer = New Byte(CInt(mem.Length)) {}
mem.Read(buffer, 0, buffer.Length)
End Using
My.Computer.FileSystem.WriteAllBytes("c:\max.exe", buffer, False)
اما همونطور که می بینید، من مجبور شدم فایل رو توو سیستم ذخیره کنم.(که نمی خوام اینطور شه)
از کدهای بعدی هم نتونستم استفاده کنم(چون برای System.Reflection.Assembly.Load(buffer) پیام خطا می داد. عکس پیام خطا رو می تونین در زیر ببینید)
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ممنون می شم اگه کمکم کنی.:20:
راستی من اینکار رو برای اطلاعات عمومیم می خوام نه برای انجام پروژه خاصی !!!
سلام
به نظر و به احتمال زیاد تا اینجا کار را صحیح انجام داده اید که با همچین پیغامی مواجه شده اید.
منتها فایل مورد شما یکسری وابستگی ها دارد (dependency) ، یعنی یک سری dll دارد که reference شده و برنامه جاری شما نمیتواند این وابستگی ها را تغذیه کند.
من باید بدانم برنامه دوم شما چه وابسته گی ها و ارجاعاتی دارد تا بتوانم دقیق کمک کنم.
- میتوانید فایل دوم را برایم آپلود کنید
- اگر سورس دومی را دارید میتوانید در VS چک کنید و ببینید چه Reference هایی دارد.
- میتوانید از برنامه ildasm.exe استفاده کنید و فایل دوم را تحویلش دهید و گزینه MANIFEST را کلیک کنید.
نه اینطور نمی تونه باشه. چون فایلی که انتخاب کردم portable بود و همچنین بجای یه فایل exe از jpg استفاده کردم که بازم همون پیام خطا رو می ده.نقل قول:
فایل مورد شما یکسری وابستگی ها دارد (dependency) ، یعنی یک سری dll دارد که reference شده و برنامه جاری شما نمیتواند این وابستگی ها را تغذیه کند.
راستی فایل دوم من getbot.exe هستش که فکر کنم داشته باشین !!
یه چیز دیگه من از .NET 2008 استفاده می کنم.
سلام
این مطلب مقائر با چیزهایی که گفتم نیست.نقل قول:
نه اینطور نمی تونه باشه. چون فایلی که انتخاب کردم portable بود
محیط CLR امنیت خاص خود را دارد، وقتی فایل مستقیماً توسط API های سیستم عامل و از هارد اجرا شود، دسترسی مستقیمی به فایلهای محلی و مهمتر از آن GAC خواهد داشت.
ولی وقتی فایلی از داخل برنامه شما در محیط CLR اجرا میشود، مسئولیت تامین منابع و امنیت با خود شما است که این عمل به طور مشخص توسط System.Security.Policy.Evidence کنترلر میشود.
من نه ضد ویروس نصب میکنم و نه به این راحتی روی exe ای دبل کلیک میکنم و نصبش میکنم!نقل قول:
راستی فایل دوم من getbot.exe هستش که فکر کنم داشته باشین !!
ولی فایل مورد نظر شما را توانستم دانلود کنم، اگر این همان فایلی باشد که مد نظر شما است، باید بگویم که این فایل اصلاً دات نتی و تحت clr نیست.
اگر به پست 2 و 6 دقت ککنید، متوجه میشوید که تاکید کردم برای این نحوه کار کرد فایل دوم خودش باید توسط زبانی دات نتی (مثل VB.Net و C#.Net و VC++.Net و Delphi.Net و...) ساخته شده باشد.
نقل قول:
نوشته شده توسط _H2_
فایل مورد نظر شما این خصیصه را ندارد و نمیتواند در محیط clr اجرا شود.
تنها راه اجرای این فایل در دات نت همان extract در هارد و اجرا مستقیم است.
نقل قول:
نوشته شده توسط _H2_
آهــــــــــــــــــــــا !!!!!
تازه فهمیدم
دستت طلا !
فعلا دیگه گیری ندارم.
بازم بخاطر وقتی که برام گذاشتی ممنونم
امیدوارم بتونم جبران کنم.
یه سوال دیگه
چطور می شه در حالتی که برنامه کامپایل شده، اونوقت ری سورس رو اضافه کنیم یا add existing بکنیم ؟
یه چیز دیگه، لطفا اسمتون رو بفرمایید تا با نام شما از مطالبتون استفاده کنم.
اگه اشتباه نکنم، آقای حاجی شریفی هستین ! درسته؟
سلام
من بلد نیستم ولی احتمال ضعیفی دارد که بشود انجامش داد.نقل قول:
چطور می شه در حالتی که برنامه کامپایل شده، اونوقت ری سورس رو اضافه کنیم یا add existing بکنیم ؟
ولی یک کار دیگر را میشود انجام داد، کامپایل در runtime.
یعنی برای کامپایل و ساخت exe و dll کامل و با تمام امکانات، نیازی به VS نیست و میتوان در runtime برنامه یک کد String را کامپایل کرد و منابع جدید به آن افزود و...
! کدام مطالب !!؟نقل قول:
لطفا اسمتون رو بفرمایید تا با نام شما از مطالبتون استفاده کنم.
حاجی شریفی هستم.
منظورتون کد زیر هست ؟
کد:Imports System.CodeDom
Imports System.CodeDom.Compiler
Public Class Form1
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click, button2.Click
Dim codeProvider As New VBCodeProvider
Dim icc As ICodeCompiler = codeProvider.CreateCompiler
Dim Output As String = "c:\Out.exe"
Dim ButtonObject As Button = CType(sender, Button)
textBox2.Text = ""
Dim parameters As New CompilerParameters()
Dim results As CompilerResults
'Make sure we generate an EXE, not a DLL
parameters.GenerateExecutable = True
parameters.OutputAssembly = Output
results = icc.CompileAssemblyFromSource(parameters, textBox1.Text)
If results.Errors.Count > 0 Then
'There were compiler errors
textBox2.ForeColor = Color.Red
Dim CompErr As CompilerError
For Each CompErr In results.Errors
textBox2.Text = textBox2.Text & _
"Line number " & CompErr.Line & _
", Error Number: " & CompErr.ErrorNumber & _
", '" & CompErr.ErrorText & ";" & _
Environment.NewLine & Environment.NewLine
Next
Else
'Successful Compile
textBox2.ForeColor = Color.Blue
textBox2.Text = "Success!"
End If
End Sub
End Class
اگه منظورتون همینه، چطور باید چیزی embed کنم؟
سلام
بله کدی شبیه همین (دیگه هر کدی option ها و تنظماتی دارد.)نقل قول:
منظورتون کد زیر هست ؟
("parameters.EmbeddedResources.Add("C:\file.extens ionنقل قول:
اگه منظورتون همینه، چطور باید چیزی embed کنم؟
=====
این قابلیت جال در واقع در نهایت به Exe کامپایلر اصلی ارجاع داده میشود ولی بالاخره برای ما یک امکان runtime جالب و زیبا و قدرتمند است، حتی میتوان خروجی کامپایل شده را بدون ذخیره روی هارد (در پشت صحنه حداقل برای لحظه کوتاهی فایلی در temp ذخیره میشود) مستقیماً در RAM اجرا کرد.
بهرحال چیز جالبی است.
آقای حاجی شریفی
چطور می شه توو کدی که توو پست قبلیم گذاشتم، به فایل کامپایل شده، Icon اضافه کرد؟
یعنی می خوام موقعی که فایل Out.exe توو هارد ذخیره شد، Icon داشته باشه.
من گشتم، ولی چیزی پیدا نکردم.
سلام
این کد را تست کنید:
"""parameters.CompilerOptions &= " /win32icon:""C:\file.ico
جنـــــاب حاجی شریفی
دست گلت درد نکنه
خیلی باحالی
دمت گرم
CompilerOptions های دیگه ای که می شه بکار برد، چیه ؟
سلام
در واقع کل این عملیان توسط همین تنظیم خط فرمانی انجام میشود
(انها هم به این تبدیل یا نگاشت میشوند، در اصلی برای بخش های مهم، یک Property برای استفاده راحت تر تعبیه شده)
لیست کامل را میتوانید در زیر مشاهده کنید
msdn.microsoft.com/en-us/library/w95cx9k1.aspx