منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : تشغيل ملف من الريسورس
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله وبركاته.
لدى مجلد لبرنامج محمول لتسريع الكمبيوتر حملته من الانترنت ووضعت هذا المجلد  فى الريسورس كى أجمع كل ملفاته وأشغل فقط ملف ال  exe لكن هناك خطأ ولا يعمل البرنامج وهذا هو الكود

PHP كود :
Dim Dir As String My.Computer.FileSystem.SpecialDirectories.Temp
        Dim Filename 
As String Dir "StartupManager.exe"
 
       IO.File.WriteAllBytes(FilenameMy.Resources.StartupManager)
 
       Process.Start(Filename

وهذه صورة توضح طلبى

(02-11-19, 11:57 PM)ابو روضة كتب : [ -> ]
السلام عليكم ورحمة الله وبركاته.
لدى مجلد لبرنامج محمول لتسريع الكمبيوتر حملته من الانترنت ووضعت هذا المجلد  فى الريسورس كى أجمع كل ملفاته وأشغل فقط ملف ال  exe لكن هناك خطأ ولا يعمل البرنامج وهذا هو الكود

PHP كود :
Dim Dir As String My.Computer.FileSystem.SpecialDirectories.Temp
        Dim Filename 
As String Dir "StartupManager.exe"
 
       IO.File.WriteAllBytes(FilenameMy.Resources.StartupManager)
 
       Process.Start(Filename
مرحبا اخي ابو روضة
هل تقصد تشغيل البرنامج من الرسورس ام في مجلد temp
اذ كان من المجلد temp فالبرنامج لا يعمل لان غير موجود بجوار ملفاته كما هو بالصورة
اهلا بك أخى ..
لا أريد شغيل البرنامج من الرسورس والصورة اللى فوق بها كل ملفات البرنامج ومجلداته داخل الريسورس
الله المستعان
السلام عليكم ورحمة الله وبركاته اظن ان البرنامج لكي يعمل يجب ان تكون جميع مكتباته وفولدراته بجواره

لايكفي اخراج ال exe لوحده ولكن عليك اخراج الفولدر كامل بنفس ترتيب الملفات

سأحاول ان اجد لك طريقة اخي الكريم

كان فيه زمان طريقة بتعمل كل الفايلات اللي مع ال Exe في فايل واحد Exe

كان اسمه Silent

مش عارف لسة موجودة ولا ايه
(25-09-20, 05:57 PM)Anas Mahmoud كتب : [ -> ]السلام عليكم ورحمة الله وبركاته اظن ان البرنامج لكي يعمل يجب ان تكون جميع مكتباته وفولدراته بجواره

لايكفي اخراج ال exe لوحده ولكن عليك اخراج الفولدر كامل بنفس ترتيب الملفات

سأحاول ان اجد لك طريقة اخي الكريم



الله يكرمك أخى وانا فعلا واضع كل جميع مكتباته
 وفولدراته بجواره  داخل الريسورس مع الملف التنفيذى...
أول نقطة
يجب أن تضيف "\" في نهاية تعريف المتغير Dir مثل
PHP كود :
Dim Dir As String My.Computer.FileSystem.SpecialDirectories.Temp "\" 

النقطة الثانية يجب إخراج جميع الملفات بنفس طريقتك
PHP كود :
IO.File.WriteAllBytes(Dir "StartupManager.exe"My.Resources.StartupManager

الملفات المتشابهة بالاسم ومختلفة بالنوع مثل StartupManager.exe وStartupManager.dll
ستجد أن إسم أول وحاد منهما تمت إضافته هو StartupManager
ولكن الثاني سيكون StartupManager1 باضافة رقم (1) يجب الانتباه لهذا الأمر عند إخراجه فيكون مثلا
PHP كود :
IO.File.WriteAllBytes(Dir "StartupManager.exe"My.Resources.StartupManager)
IO.File.WriteAllBytes(Dir "StartupManager.dll"My.Resources.StartupManager1' لاحظ رقم 1 في نهاية ملف الريسورس 

النقطة الثالثة إذا كان هناك مجلدات تخص البرنامج StartupManager فيجب إنشاءها واستخراج الملفات الخاصة به داخلها
مع الانتباه لمسار المجلد أن ينتهي بـ "\" لتلافي حدوث مشكلة

وفي النهاية تستطيع تشغيل البرنامج
PHP كود :
Process.Start(Dir "StartupManager.exe"

قد تكون فعلت كل هذا ولكن المشكلة لديك كانت في عدم وجود "\" في نهاية المسار Dir

لفحص أي مسار تنشئه قم بعده بعمل مسج لإظهار محتواه فقط لتتأكد من وجود "\" ان الكود يسير بشكل صحيح
ثم احذف او عطل سطر مسج الاختبار

قد يكون الكود مثل
PHP كود :
Dim Dir1 As String My.Computer.FileSystem.SpecialDirectories.Temp "\"
IO.File.WriteAllBytes(Dir1 + "
GUDownloader.exe", My.Resources.GUDownloader)
IO.File.WriteAllBytes(Dir1 + "
StartupManager.exe", My.Resources.StartupManager)
IO.File.WriteAllBytes(Dir1 + "
StartupManager.dll", My.Resources.StartupManager1) ' لاحظ رقم 1 في نهاية ملف الريسورس

Dim Dir2 = My.Computer.FileSystem.SpecialDirectories.Temp & "
\data\"
IO.Directory.CreateDirectory(Dir2)
IO.File.WriteAllBytes(Dir2 + "
datafile.bin", My.Resources.Datafile)
IO.File.WriteAllBytes(Dir2 + "
!!!!!!!!!!.!!!", My.Resources.!!!!!!!!!!)
'
'
'
Dim Dir3 = My.Computer.FileSystem.SpecialDirectories.Temp & "
\!!!\"
IO.Directory.CreateDirectory(Dir3)
'
'
'

Process.Start(Dir1 + "
StartupManager.exe") 


أتمنى أن أكون أفدتك في تطببيق فكرتك




هناك فكرة ضغط البرنامج StartupManager مع جميع ملفاته ومجلداته
ثم فك الضغط عنه في المسار المطلوب وبعدها تشغيله

لكن طريقة هذه الفكرة لا تحضرني حاليا
واعتقد أنها قد تحتاج مكتبة ضغط وفك الضغط عن الملفات


تمنياتي لك بالتوفيق
الطريقة الابسط كما اشار لها الاخ هي ضغط جميع الملفات في ملف واحد وليكن اسمه Archive.zip ، الملفات موضوعه داخله مباشرة وليست داخل فولدر اولا يجب الانتباه لهذا الامر


الان يمكننا اضافة هذا الملف Zip الى resources ومن ثم استدعاءه على هيئة MemoryStream ومن ثم اخراجه باستخدام ZipArchive التابعة لفضاء الاسماء Imports System.IO.Compression


كود :
Imports System.IO
Imports System.IO.Compression

الاجراء التالي لفك ضغط ملف zip من ال resources :
كود :
    Sub UnZipFromByte(Archive As Byte(), Path As String)
        If Directory.Exists(Path) Then Directory.Delete(Path, True)
        Using ZipStream As New MemoryStream(Archive)
            Using Zip As New ZipArchive(ZipStream)
                Zip.ExtractToDirectory(Path)
            End Using
        End Using
    End Sub

استخدامه :
كود :
       UnZipFromByte(My.Resources.Archive, "StartupManager")
       Process.Start("StartupManager\StartupManager.exe")

نقوم بفك الضغط في مجلد StartupManager بجوار البرنامج ومن ثم نقوم بتشغيل StartupManager\StartupManager.exe

المصادر :
https://stackoverflow.com/a/21404060/14137871
https://stackoverflow.com/questions/2222...hat-folder
https://docs.microsoft.com/en-us/dotnet/...etcore-3.1
https://docs.microsoft.com/en-us/dotnet/...etcore-3.1
جزاكم الله كل الخير أخوتى الكرام ماشاء الله ولا حول ولا قوة إلا بالله....

لكن عذراً هناك خطأ بسيط

أنا أعمل على فريم ورك 4 فهل هذا الخطأ يحتاج الى فريم أعلى 
اجل اخي zipArchive موجودة من اول 4.5

لا ادري ما الاسهل ، تغيير الفريم وورك ام البحث عن طريقة اخرى لفك الضغط

الفكرة في النهاية واحدة
الصفحات : 1 2