السلام عليكم ورحمة الله وبركاته.
لدى مجلد لبرنامج محمول لتسريع الكمبيوتر حملته من الانترنت ووضعت هذا المجلد فى الريسورس كى أجمع كل ملفاته وأشغل فقط ملف ال exe لكن هناك خطأ ولا يعمل البرنامج وهذا هو الكود
PHP كود :
Dim Dir As String = My.Computer.FileSystem.SpecialDirectories.Temp
Dim Filename As String = Dir + "StartupManager.exe"
IO.File.WriteAllBytes(Filename, My.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(Filename, My.Resources.StartupManager)
Process.Start(Filename)
مرحبا اخي ابو روضة
هل تقصد تشغيل البرنامج من الرسورس ام في مجلد temp
اذ كان من المجلد temp فالبرنامج لا يعمل لان غير موجود بجوار ملفاته كما هو بالصورة
اهلا بك أخى ..
لا أريد شغيل البرنامج من الرسورس والصورة اللى فوق بها كل ملفات البرنامج ومجلداته داخل الريسورس
السلام عليكم ورحمة الله وبركاته اظن ان البرنامج لكي يعمل يجب ان تكون جميع مكتباته وفولدراته بجواره
لايكفي اخراج ال exe لوحده ولكن عليك اخراج الفولدر كامل بنفس ترتيب الملفات
سأحاول ان اجد لك طريقة اخي الكريم
كان فيه زمان طريقة بتعمل كل الفايلات اللي مع ال Exe في فايل واحد Exe
كان اسمه Silent
مش عارف لسة موجودة ولا ايه
أول نقطة
يجب أن تضيف "\" في نهاية تعريف المتغير 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
لا ادري ما الاسهل ، تغيير الفريم وورك ام البحث عن طريقة اخرى لفك الضغط
الفكرة في النهاية واحدة