تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مثال على عملية إنشاء Windows Service – إنشاء برنامج تشفير تلقائي للملفات
#1
كاتب الموضوع : samerselo

فكرة المشروع – بناء خدمة ويندوز تقوم بتشفير أي ملف تلقائيا عند نسخه إلى مجلد معين وسنستخدم هنا إجرائية تشفير قابلة للعكس بحيث أن عملية إعادة نسخ الملف لذلك المجلد تقوم بفك تشفيره
أنشئ مشروعا جديدا من نوع Windows Service وقم بتسميته AutoFileEncryptor وغير تسمية Service1.vb إلى AutoFileEncryptor.vb ووافق على الرسالة التي تطلب منك إعادة تسمية الفئة ثم افتح محرر التصميم لـ AutoFileEncryptor و اسحب العنصر FileSystemWatcher على سطع النافذة ثم افتح محرر الكود الخاص بـ AutoFileEncryptor
أضف التعريف التالي في القسم العام للفئة AutoFileEncryptor

كود :
Private WatcPath = "d:\AutoFileEncryptor"
عدل إجراء الحدثين OnStart و OnStop ليبدوا كما في الكود التالي وذلك لتعيين الخصائص الابتدائية للعنصر FileSystemWatcher

كود :
Public Class AutoFileEncryptor
Private WatcPath = "d:\AutoFileEncryptor"

Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
Me.FileSystemWatcher1.Path = WatcPath
Me.FileSystemWatcher1.EnableRaisingEvents = True
End Sub

Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
Me.FileSystemWatcher1.EnableRaisingEvents = False
End Sub

End Class
لكتابة إجرائية التشفير سنحتاج أولا لإضافة التعريفات العامة التالية في فئتنا

كود :
' This is the binary password.
Dim pwBytes() As Byte = {123, 234, 12, 9, 78, 89, 212}
' This is the extension used for temporary files.
Dim tempExt As String = ".$$$"
وأيضا أضف الاستيراد التالي في بداية الملف

كود :
Imports System.IO
ضمن الفئة اكتب الكود التالي الذي يمثل إجرائية التشفير

كود :
' This is the encryption/decryption routine.
Private Sub EncryptFile(ByVal Filename As String, ByVal pwBytes() As Byte)
' This is the size of each input block.
' (Files must be decrypted using the same block size.)
Const BLOCKSIZE = 8192
' Determine the name of the temporary file.
Dim tempFile As String = Filename & tempExt
' Open the source file as a binary input stream.
Dim inStream As New FileStream(Filename, IO.FileMode.Open)
' Open the temporary output file as a binary input stream.
Dim outStream As New FileStream(tempFile, IO.FileMode.Create)
' Determine the number of bytes to read.
Dim bytesLeft As Long = inStream.Length
' Prepare an input buffer.
Dim buffer(BLOCKSIZE - 1) As Byte
' Loop until there are bytes to read.
Do While bytesLeft > 0
' Read max 8 KB at a time.
Dim bytesToRead As Long = Math.Min(BLOCKSIZE, bytesLeft)
' Read into the input buffer.
inStream.Read(buffer, 0, bytesToRead)
' Encrypt this buffer.
EncryptArray(buffer, pwBytes)
' Output to the temporary file.
outStream.Write(buffer, 0, bytesToRead)
' We have fewer bytes to read now.
bytesLeft -= bytesToRead
Loop
' Close the two streams.
inStream.Close()
outStream.Close()
' Delete the source file.
File.Delete(Filename)
' Rename the temporary file as the original file.
File.Move(tempFile, Filename)
End Sub

' This routine encrypts an array of bytes.
Sub EncryptArray(ByVal buffer() As Byte, ByVal pwBytes() As Byte)
' This index points to the password array.
Dim i As Integer
' The max value for i
Dim maxval As Integer = pwBytes.Length
For index As Integer = 0 To buffer.Length - 1
' XOR each element with the corresponding element in the password.
buffer(index) = buffer(index) Xor pwBytes(i)
' Ensure that the index is always in the valid range.
i = (i + 1) Mod maxval
Next
End Sub
أضف إجراء معالجة للحدث Created الخاص بالعنصر FileSystemWatcher وعدله ليصبح كما في الكود التالي

كود :
Private Sub FileSystemWatcher1_Created(ByVal sender As Object, _
ByVal e As System.IO.FileSystemEventArgs) _
Handles FileSystemWatcher1.Created

' Ignore temporary files created by the encryption process.
If System.IO.Path.GetExtension(e.FullPath) = tempExt Then Exit Sub
' Encrypt the file being created.
EncryptFile(e.FullPath, pwBytes)
End Sub
أضف الكود التالي للإجراء OnStart كي نتأكد عند بداية الخدمة أن المجلد موجود فعلا

كود :
If Not Directory.Exists(WatcPath) Then
Directory.CreateDirectory(WatcPath)
End If
ليصبح الاجراء كاملا

كود :
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
If Not Directory.Exists(WatcPath) Then
Directory.CreateDirectory(WatcPath)
End If
Me.FileSystemWatcher1.Path = WatcPath
Me.FileSystemWatcher1.EnableRaisingEvents = True
End Sub
انتقل إلى سطح التصميم لـ AutoFileEncryptor واضبط الخاصية ServiceName لـ AutoFileEncryptor إلى Auto File Encryptor واضغط زر الفأرة اليميني واختر الأمر Add Installer من قائمة السياق ومن خصائص ServiceInstaller1 اضبط كلتا الخاصيتين DisplayName و ServiceName إلى Auto File Encryptor ثم انتقل لخصائص ServiceProcessInstaller1 واضبط الخاصية Account إلى Local Service ثم اختر الأمر Save All من قائمة File
قم بعمل Build للمشروع
أنشئ مجلدا مؤقتا باسم Temp على السواقة D وانسخ الملف التنفيذي للمشروع إليه
ثم أنشئ فيه ملفا نصيا باسم Install.bat بحيث تكون محتوياته

كود :
INSTALLUTIL AutoFileEncryptor.exe
وأيضا ملف نصي آخر باسم Uninstall.bat بحيث تكون محتوياته

كود :
INSTALLUTIL /U AutoFileEncryptor.exe
انتقل إلى مجلد Visual Studio في قائمة ابدأ و شغل الأمر Visual Studio 2008 Command Prompt وتأكد من أنك شغلته باستخدام الخيار Run as Administrator عندما تعمل على ويندوز فيستا ثم من نافذة الكونسول اكتب الأوامر التالية تباعا مع الضغط على Enter بعد كل سطر

كود :
D:
CD\temp
Install
فيتم تنصيب الخدمة في ويندوز
اترك نافذة الكونسول مفتوحة وانتقل الآن إلى بيئة التطوير وانتقل إلى نافذة Server Explorer ووسع الشجرة حتى ترى العقدة Services انقر على العقدة Services بزر الفأرة اليميني و اختار الأمر Launch Services Manager ابحث ضمن القائمة عن Auto File Encryptor ثم قم ببدء تشغيل الخدمة
لتجربة الخدمة انسخ أي ملف نصي إلى المجلد d:\AutoFileEncryptor وحاول قراءة محتويته ستراها بالصيغة المشفرة ولفك تشفير الملف انقله إلى أي مجلد آخر ثم انسخه للمجلد d:\AutoFileEncryptor مرة ثانية ليتم فك تشفيره تلقائيا
لإزالة الخدمة عد إلى برنامج Services Manager وقم بإيقاف الخدمة ثم عد إلى نافذة الكونسول ونفذ الأمر Uninstall
}}}}
تم الشكر بواسطة:
#2
كاتب المشاركة : samerselo

وهذا الكود الكامل للمشروع الذي أرجو أن لاتقوم بتحميله قبل محاولة العمل بنفسك Auto File Encryptor
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] شرح انشاء برنامج لتسجيل الدخول للمنتدى CLARO 2 438 27-10-16, 04:03 PM
آخر رد: rafaag777
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 280 11-09-16, 07:20 AM
آخر رد: أبووسم
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 8 2,486 26-08-16, 10:21 AM
آخر رد: tryold
Information تحميل برنامج الفيجوال بيسك 2010 download visual basic 2010 mohamed atef2018 0 262 09-07-16, 08:30 PM
آخر رد: mohamed atef2018
  العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع ابو ليلى 10 889 23-06-16, 01:13 PM
آخر رد: yasser_72
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 9 322 02-06-16, 11:13 AM
آخر رد: CLARO
  [مشروع] مشروع برنامج لتشغيل ملفات mp3 alking-0999 1 393 01-06-16, 10:20 PM
آخر رد: CLARO
  شرح انشاء برنامج دردشة بسيط CLARO 0 252 28-05-16, 02:24 PM
آخر رد: CLARO
  موضوع الاستاذ رامي مثال \ لطريقة تفعيل برنامجك عند العميل وتغيير كلمة مرور اRamilove سعود 7 2,060 26-01-16, 08:07 PM
آخر رد: سعود
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 543 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم