تقييم الموضوع :
  • 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
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,643 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,880 08-09-22, 11:54 AM
آخر رد: saif2023
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,257 04-06-22, 01:14 PM
آخر رد: yassoo1985
  مقدمة الي تشفير الحروف الأبجدية العربية silverlight 3 9,504 17-05-22, 02:23 AM
آخر رد: flawer69
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,419 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 1,987 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,406 22-12-21, 05:09 PM
آخر رد: alessam4pro
Heart [VB.NET] برنامج ادارة المطاعم و الكافيهات mgr21002100 6 6,677 14-01-21, 07:59 PM
آخر رد: abarrak
  مثال للتعامل مع الجداول المرتبطة - عن طريق الكلاسات ابو ليلى 25 15,203 04-10-20, 06:16 PM
آخر رد: محمد بن عطية
  تفعيل برنامج Visual Studio 2019 Adilo idabdellah 4 11,540 20-05-20, 11:48 AM
آخر رد: الفاضي

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


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