شرح الكود
======
السطر الاول قمنا باستدعاء system.io namespace حتى يمكننا استخدام StreamReader لقرائة الملفات النصية txt files
الاسطر من 3 - 8 قمنا بالاعلان عن عدد من المتغيرات النصية والتي سوف يتم فيها تخزين الاعدات التي تم قرائتها من ملف الاعدادات و هم كالتالي
Temp_Dir ( مكان تخزين الملفات المؤقتة)
Version_URL (رابط تحميل ملف رقم اصدار التحديثات)
Version_Num ( رقم اصدار البرنامج الحالي)
Info_URL ( رابط تحميل ملف المعلومات الخاص بالتحديثات)
Update_URL (رابط تحميل التحديثات)
Config_File (مكان ملف الاعدادات) و هو كالتالي Debug\\\\Config\\\\Update.txt
بعد ذلك قمت بانشاء اجراء اسميتة Read_Config
اول سطر في الاجراء Read_Config استخدمنا فية File.Exists للتحقق من وجود ملف الاعداد
فاذا كان الملف موجود في المكان الافتراضي ينتقل المترجم الى السطر الذي يلية حيث استخدمنا
Try...Catch في محاولة لقرائة ملف الاعداد
اعلنا عن متغير اسمة ObjReader من نوع StreamReader و اعطيناة مسار ملف الاعدادات
ثم اعلنا عن متغير نصي Config_Reader وهو يحتوي على المعلومات الموجودة في ملف الاعدادات وذلك من خلال objReader.ReadToEnd
بعد ذلك استخدمنا objReader.Close() لغلق الملف بعد قرائتة لتحرير مصادر النظام
قبل ان نكمل مع السطر التالي سترى ما هية طريقة التي قمت بابتداعها لكتابة ملف الاعداد
http://vb4arab.com/vb/uploaded/28777/01213852206.pngاعتقد انك بسهولة استطعت ان تفهم الاعدادات لانها اعتقد انها طريقة مرنة في فهم الاعدادات و قرائتها من قبل البرنامج كما سترى بعد قليل
نستكمل شرح الكود
اعلنا عن متغير نصي Ary_Config و جعلنا يقوم بتقطيع ملف الاعداد الى مجموعة من الاسطر المتتالية كل سطر لة رقم معين وذلك على حسب وجود العلامة "!" حيث ان وجود العلامة "!" دليل على انتهاء السطر دون ان يقرا العلامة "!"
انظر الى الطريقة التي سوف يقوم فيها البرنامج بقرائة الملف و قارنها بالطريقة التي كتبنا بها الملف
http://vb4arab.com/vb/uploaded/28777/11213852206.pngالان حان الوقت لتصنيف المعلومات من ملف الاعدادات ووضع كل اعداد في المتغير الخاص بة مثلا نضع رابط تحميل ملف التحديثات داخل المتغير Update_URL والذي اعلنا عنة في اول Module وهو من نوع public حتى نستخدمة داخل FrmUpdate و بمثل لباقي المتغيرات
سوف يتم تصنيف الاعدادات على حسب رقم السطر فمثلا في الصورة السابقة ماهو رقم السطر الخاص بمسار المجلد الحاوي للملفات المؤقتة ستجد انة رقم 3
3 ؟ كيف يا ماجيك سورد اعتقد انة 4
بل 3 لان السطر الاول ياخذ الرقم 0
سيبك من الرياضيات لانني ماليش فيها , نستكمل الكود
سوف نضع لكل متغير رقم السطر الذي يحتوي على الاعداد الخاص بة مثلا
Temp_Dir = Ary_Config(3)
يعني ان الاعداد الخاص بمسار المجلد الذي سوف يحتوي على الملفات المؤقتة هو السطر رقم 3
و بالتالي سوف يتم وضع هذا الاعداد داخل النتغير Temp_Dir و بالمثل لباقي المتغيرات...
بعد كل ذلك نكون قد انتهينا من قرائة ملف الاعدادات و تصنيف الاعدادات ووضع كل منها على حدة في متغير خاص بها لاننا سوف نستخدمهم في FrmUpdate
في حالة كتابتك للملف بشكل خاطئ او قيام بتعديل الملف بطريقة غير صحيحة سوف يظهر البرنامج رسالة خطأ Runtime error
لذلك استخدمت Try.... catch لتوقع الخطأ حيث يظهر البرنامج رسالة تفيد بعدم القدرة على قرائة الملف بعد ذلك يغلق البرنامج...
في حالة عدم وجود الملف في مسارة الافتراضي نتيجة للحذف او النقل سوف يظهر البرنامج تفيد ان ملف الاعدادات غير موجود وبعد ذلك يغلق البرنامج.....
================================================== ======
الموديول PreUpdate
تحتوي على مجموعة من الاجرائات التي يتم استدعائها قبل الشروع في عملية التحديث
مثل التاكد من وجود الاتصال بالانترنت , التاكد من وجود اتصال فعلي , معرفة اصدار التحديثات عن طريق تحميل الملف Update.ver , تحميل الملف Updateinfo.rtf الذي يحتوي على معلومات عن التحديثات , تنظيف الملفات المؤقتة القديمة
Code
===
الرمز PHP:
Imports System.Net
Imports System.Threading
Module PreUpdate
Sub Cleaning_Temp()
On Error Resume Next
IO.File.Delete(Temp_Dir & "[url=https://aliaabo.yoo7.com/file://\\\\Update.ver"\\\\Update.ver"[color:540d=#007700[/url]])
IO.File.Delete(Temp_Dir & "[url=https://aliaabo.yoo7.com/file://\\\\UpdateInfo.rtf"\\\\UpdateInfo.rtf"[color:540d=#007700[/url]])
IO.File.Delete(Application.StartupPath & "[url=https://aliaabo.yoo7.com/file://\\\\Guard.exe"\\\\Guard.exe"[color:540d=#007700[/url]])
Dim Checking_Connection_Thread As New System.Threading.Thread(AddressOf Checking_Connection)
Checking_Connection_Thread.Start()
End Sub
Function Checking_Connection() As Boolean
Checking_Connection = My.Computer.Network.IsAvailable
If Checking_Connection = True Then
Dim Checking_Version_Thread As New Threading.Thread(AddressOf Checking_Version)
Checking_Version_Thread.Priority = ThreadPriority.AboveNormal
Checking_Version_Thread.Start()
ElseIf Checking_Connection = False Then
MsgBox("No connection")
Exit Function
End If
End Function
Sub Checking_Version()
Try
My.Computer.Network.DownloadFile(Version_URL, (Temp_Dir & "[url=https://aliaabo.yoo7.com/file://\\\\update.ver"\\\\update.ver"[color:540d=#007700[/url]]))
Catch
ex As Exception
MsgBox("Could not download update.ver")
Exit Sub
End Try
Dim objReader As New System.IO.StreamReader(Temp_Dir & "[url=https://aliaabo.yoo7.com/file://\\\\update.ver"\\\\update.ver"[color:540d=#007700[/url]])
Dim Update_Version As String = objReader.ReadToEnd
objReader.Close()
If Val(Update_Version) > Val(Version_Num) Then
My.Computer.Network.DownloadFile(Info_URL, (Temp_Dir & "updateInfo.rtf"))
MsgBox("New Updates")
ElseIf Val(Update_Version) = Val(Version_Num) Then
Msg("No new updates")
Exit Sub
End If
End Sub
End Module
شرح الكود
=======
السطرين 1 ,2
نقوم فيهم باستدعاء system.net لاستخدام مجموعة من الوظائف الخاصة بالانترنت
و system.thread لعمل threads للبرنامج والذي سوف يزيد سرعة البرنامج ويوفر لة الثبات و الاستقرار
================================================== ===
اول اجراء قمنا ببناءة هو Clean_Temp وواضح من اسمة انة يقوم بازالة الملفات المؤقتة القديمة حتى لا يحدث تعارض بين الملفات القديمة و الحديثة
استخدمنا On Error Resume Next لتلافي خطأ ان الملفات المؤقتة غير موجود ربما المستخدم قان بازالتها يدويا او انة المستخدم قام بتغير مسار الملفات المؤقتة Temp_Dir
استخدمنا IO.File.Delete لحذف ثلاثة ملفات مؤقتة وهم
Update.ver وهو الملف الذي يقوم Smart Update Wizard بتحميلة قبل البدء في التحديث و هو الذي يحتوى على رقم اصدار ملف التحديثات , ويوجد داخل المجلد المؤقت temp_dir
UpdateInfo.rtf وهو الملف الذي يقوم Smart Update Wizard بتحميلة قبل البدء في التحديث
والذي يحتوي على نبذة مختصرة عن اهمية التحديثات حتى يقرر المستخدم اذا يريد تحميل التحديثات ام لا ؟ ,ويوجد داخل المجلد المؤقت temp_dir
Guard.exe هو ملف التحديثات القديم وهذا داخل في نفس مسار الملف التنفيذي
بعد ان يقوم Clean_Temp بازالة الملفات القديمة والمؤقتة يقوم بعمل thread اسمها Checking_Connection_Thread ويقوم بعمل start لها في السطر التالي ويتم في هذة thread استدعاء وظيفة Checking_Connection
================================================== ==
وظيفة Checking_Connection
الهدف من Checking_Connection هو التحقق من وجود بالانترنت حتى لا يحدث خطأ في البرنامج عند بدا التحميل
لذلك استخدمنا My.Computer.Network.IsAvailable للتحقق من وجود الانترنت
في حالة وجود اتصال تكون قيمة checking_connection = true فسوف يتم بناء thread جديد و استدعاء اجراء Check_Version
اما في عدم وجود اتصال تكون checking_connection= false وعندها تظهر رسالة تفيد بعدم وجود
الانترنت والخروج من الوظيفة
================================================== ======