نمایش نتایج 1 تا 15 از 15

نام تاپیک: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

  1. #1

    قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام خدمت همه اساتيد فروم .
    سوال بنده : چطوري يك سري فايل در درون فايل EXE قرار دهيم و از آن استفاده كنيم مثال : وقتي كرك (از نوع پچ ) برنامه اي را ميگيري و در فلدر برنامه كپي ميكني يك فايل exe اما يك يا چند فايل در مسير مورد نظر كپي ميشود .
    ممنون از دوستان اگر راهنمايي كنند و يا مثالي بگذارند.

  2. #2
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    اصولاً کار جالبی نست.

    1- با فرمان Project->Add Existing Item فایل را به پروژه الحاق کنید
    2- فایل را از Solution Explorer انتخاب و در پنجره properties خصوصیت Build Action انرا به Embedded Resource ست کنید.
    3- استریم فایل با فرمان زیر در دسترس است،

    System.Reflection.Assembly.GetExecutingAssembly.Ge tManifestResourceStream("Projectname.Filename.exe" )

  3. #3

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    خيلي ممنون اما ميتونيد يك مثال بگذاريد

  4. #4
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    کد به اینکه فایل چه فرمتی دارد و چه استفاده ای از آن میشود، فرق میکند.
    مثلاً برای تصاویر و متون و html و صوت و... راه های ساده ای برای استفاده وجود دارد.
    ولی شما نوع فایل را مشخص نکردید...
    من فقط میتوانم کد کلی زیر را برایتان بگذارم

    پس از طی کردن مراحل 1 و 2 در پست قبلیم، با کد زیر میتوانید فایل Embedded شده را با هر حجمی که باشد در مسیر واقعی هارد Extract کنید.
    البته راه میانبر دیگری هم دارد ولی راه فوق مطمئن و قطعی است.

    Public Shared Sub Copy(ByVal Source_EmbeddedName As String, ByVal Destin_FilePath As String)
    Const BUFFERSIZE As Integer = 16 * 1024
    Dim buffer(BUFFERSIZE - 1) As Byte
    Dim iRead As Integer

    Using _
    source As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.Ge tManifestResourceStream(Source_EmbeddedName), _
    destin As New System.IO.FileStream(Destin_FilePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)

    Do
    iRead = source.Read(buffer, 0, BUFFERSIZE)
    If (iRead <= 0) Then Return
    destin.Write(buffer, 0, iRead)
    Loop
    End Using
    End Sub


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

    Copy("Projectname.Filename.Extension", "C:\Filename.Extension")


    موفق باشید.

  5. #5

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    با سلام

    حالا اگه بخواهیم که یه فایل مثلا صوتی رو توی فایل exe خودمون داشته باشیم باید همون مراحل 1 و 2 رو طی بکنیم؟
    و اگه اضافه کردیم باید چطوری ازش استفاده بکنیم؟؟؟؟

    با تشکر...

  6. #6
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    اگر فایلتان فرمت wav داشته باشد یا با نرم افزاری به wav تبدیلش کنید، میتوانید از کد زیر استفاده کنید.


    Dim player As New System.Media.SoundPlayer(System.Reflection.Assembl y.GetExecutingAssembly.GetManifestResourceStream("Projectname.Filename.wav"))
    player.Play()
    'player.PlayLooping()
    'player.PlaySync()
    'player.Stop()


    مفهوم کلی همان است که در پست 2 گفتم، دستور پست 2 به شما یک Stream از فایل مورد نظر پس میدهد، شما میتوانید این Stream را برای دستورات مختلف و کاربرد های متفاوت خرج کنید.

    اغلب کلاسهای دات نت که مربوط به کار روی فایلهایی خاص کار میکنند، بجز پذیرفتن مسیر فایل در هارد، Stream ای به فایل را هم میپذیرند که این قابلیت بزرگی است، یک Stream مثل همین مورد میتواند یک فایل Embedded شده را نشانه رفته باشد، یا یک Stream دانلود باشد، یا یک Stream شبکه، و....
    این از ویزگی های وراثت است.

  7. #7

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    ممنون از پاسختون

    البته منظور اصلی من اینه که فایل صوتی داخل فایل exe خودمون کامپایل بشه و اصلا در هارد قرار نگیره. مثل بعضی از فایلهای Pacth یا KeyGen که وقتی اجرا میشن یه فایل موزیک رو پخش میکنن...

  8. #8
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    خوب کد فوق همین کار را انجام میدهد... !
    یعنی لزومی به وجود فایل صوتی در خارج exe نخواهد بود
    معنی Embedded همین است.
    شما فایل را Embedded میکنید و قادر خواهید بود با همان دو خط کد و بدون خارج کردن در هارد، فایل صوتی را پخش کنید.

  9. #9

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    خيلي ممنون اما من اجرا كردم يه فايل psd تو برنامه قرار دادم اما تو اين دستور خطا ميگرفت
    iRead = source.Read(buffer, 0, BUFFERSIZE)
    بعد اگه برای تصاویر و متون و html و صوت هم توضيح بدي ممنون ميشم و سوال بعدي هم اين كه اگه
    project >properties رو انتخاب كني و در قسمت كناري اون تب ‌resources رو انتخاب كني اونجا ميتوني فايل قرار بدي و يه فلدر با همين نام به پروژت اضافه ميشه اي هم چطوريه؟
    من براي آهنگ باهاش كار كردم

  10. #10
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    اول از دوستان عضر خواهی میکنم، مجبور شدم یک هفته ای به مسافرتی کوتاه برم، و تازه امروز برگشتم...
    در کل مجدداً بابت تاخیر در ارسال جواب عضر خواهی میکنم.

    نقل قول نوشته شده توسط timeteam مشاهده تاپیک
    ...تو اين دستور خطا ميگرفت..
    چه خطایی؟ حتماً NullRefrence ???!!!
    یا مراحل را درست انجام نداده اید یا Projectname.Filename.Extension را صحیح وارد نکرده اید...
    Project->Properties را اجرا و به کادر AssemblyName دقت کنید.


    نقل قول نوشته شده توسط timeteam مشاهده تاپیک
    ... برای تصاویر و متون و html و صوت
    صوت را که در پست قبلیم گفتم
    اگر فایل متنی یا html باشد میتوانید با کد زیر استخراجش کنید و در یک نمونه String لودش کنید، و اگر html باشد میتوانید برای نمایش به کنترلر WebBrowse تحویلش دهید.
    به encoding هم دقت کنید.

    Dim data As String

    Using _
    strm As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.Ge tManifestResourceStream("Projectname.Filename.Extension"), _
    txtreader As New System.IO.StreamReader(strm, System.Text.Encoding.UTF8)

    data = txtreader.ReadToEnd

    End Using


    اگر هم تصویر استانداری باشد bmp, gif, png, tif, wmf, jpg, ... (فرمت های پیچیده ای مثل psd به ذات در دات نت تعریف نشده اند)

    Dim img As System.Drawing.Image

    Using strm As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.Ge tManifestResourceStream("Projectname.Filename.Extension")

    img = System.Drawing.Image.FromStream(strm)

    End Using

    Me.PictureBoxName.Image = img



    نقل قول نوشته شده توسط timeteam مشاهده تاپیک
    project >properties رو انتخاب كني و در قسمت كناري اون تب ‌resources رو انتخاب كني اونجا ميتوني فايل قرار بدي و يه فلدر با همين نام به پروژت اضافه ميشه اي هم چطوريه؟
    اون هم بد نیست،
    البته در نسخه های قبل پیش فرض در این روشی که شما گفتید XML بود، یعنی فایل باینری را به فرمت XML-Base64 تبدیل میکرد که این روش هم حجم را سنگین میکرد و هم سرعت را بشدت کاهش میداد که خوشبختانه مایکروسافت در نسخه بعدی ( یادم نیست 2005 یا 2008) پیش فرض را روی Link گذاشت.

    در این روش فایل مورد نظر از طریق خواص
    My.Resources.FileName
    یا
    My.Resources.Resources.FileName
    و به صورت غیر Stream در دسترس هستند، یعنی حجم کد نویسی شما را کاهش میدهند.
    مثلاً کد قبلی که نمونه ای از Image را به دست می اورد در این روش نیازی نیست، چون خود خصوصیت نمونه ای از Image را پس میدهد.

    این روش یک مزیت در مورد تصاویر هم دارد.
    و آن این است که اگر تصاویر را به این بخش اضافه کنید، میتوانید در زمان طراحی و به راحتی از تصاویر برای نمایش داده شدن در انواع بخش ها استفاده کنید، Menu یا PictureBox و....

    مثلاً شاید شما تصویری را بخواهید در بخش های پنجره های مختلفی نشان دهیدف در دیالوگ مربوطه اگر تصویر را به بخش Local resource هر پنجره اضافه کنید، فایل مورد نظر مدام و به تعداد نقاط مورد استفاده در محصول نهایی کپی میشود و موجب افزایش حجم فایل نهایی میشود، ولی اگر آنرا در بخش Project resource file اضافه کنید و یا از مسیر Project->Properties->Resources و یا یک روش دیگر اقدام کنید، فقط یک بار فایل به درون exe یا dll نهایی وارد میشود.

    از این مزیت زمان طراحی تصاویر که بگذریم، روشی که شما گفتید و ان که من پیشنهاد (من به شخصه از Sream ها خوشم می آید، دست آدم را باز میگذارند!) کردم در ذات تفاوتی ندارند و هر دو بر یک مبنا استوار هستند.

    موفق باشید.

  11. #11

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    دوست من به نظرم بهتره فایل رو در کنار برنامه داشته باشی

  12. #12

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    حالا يه اسكين داروم كه مي خوام تو برنامه قرار بدم و براي اجراي اسكين در برنامه بايد يه مسير رشته اي به آن بديم به اين صورت "skin1.Load="c:\vista.skn" حالا من مي خوام تو برنامه اسكين رو قرار بدم و استفاده كنم چطوري ميشه؟

  13. #13

    Thumbs down نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    حال من تمام مراحل را انجام دادم اما باز خطا ميگيره اين هم سورس مشكل كجاست؟
    فایل های ضمیمه فایل های ضمیمه

  14. #14
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    سلام
    نقل قول نوشته شده توسط rezapassword مشاهده تاپیک
    دوست من به نظرم بهتره فایل رو در کنار برنامه داشته باشی
    به نظر شخصی من هم اگر تصویر یا افکت خاص صوتی یا چیزهای ثابتی از این دست باشد و در داخل اسمبلی مان بگنجانیم خوب است.
    ولی جا دادن یک آهنگ یا یک exe یا dll یا امثالهم چندان زیبا و اصولی نیست و بهتر است در خارج و در کنار برنامه اصلی قرار گیرد.

    نقل قول نوشته شده توسط timeteam مشاهده تاپیک
    حال من تمام مراحل را انجام دادم اما باز خطا ميگيره اين هم سورس مشكل كجاست؟
    نام root تایپی شما شامل فاصله است و اصلاً این امکان ندارد، نام root شما Embedded_Resource است که در کل با نام فایل، میشود Embedded_Resource.id.nfo

  15. #15

    نقل قول: قرار دادن يك فايل در فايل exe برنامه و استفاده از آن

    بسمه تعالی
    با عرض سلام و خسته نباشید خدمت دوستان گرامی
    با اینکه می دونم خیلی وقته از تاریخ ایجاد این تاپیک می گذره ولی مجبورم سوالم را مطرح کنم و امیدوارم دوستان راهنمایی کنند، و اما مشکل: من برنامه ای دارم که توسط چینی ها نوشته شده که شامل یک فایل exe به اضافه یکسری فولدر که در آن عکس و dllها و مابقی احتیاجات پروژه است، حال من می خوام با دات نت (ترجیحآ vb) برنامه ای بنویسم که برنامه مذکور با تمام متعلقاتش درون فایل exe برنامه من قرار بگیرد و ابتدا برنامه من اجرا شده و پس از چک کردن یکسری موارد نظیر مثلا شماره سریال cpu یا هارد یا مادربرد برنامه مذکور اجرا شود البته مشکل من فقط در همان بخش اول کار است یعنی قرار دادن برنامه ای که گفتم درون برنامه خودم، این رو هم بگم که هدفم از این کار به نوعی تولید یک قفل برای برنامه هست و البته قبل از اینکه به فکر این کار بیفتم از برنامه هایی نظیر SoftwarePassport Armadillo Professional یا Private.exe.Protector استفاده کردم امام نتیجه مطلوب و دلخواهم کسب نشد، ممنون می شم اگر کسی از دوستان در این زمینه بنده را راهنمایی کنه.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •