الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشغيل البرنامج ك System Service

مغلقرائج
بدأه Eng. Usama El-Mokadem في 23 مارس 2007 · 21 رد · 38,714 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة...

Service.zip

بأستخدام (MS-VB 6.0)

ذكرت فى أحد الموضوعات السابقة - كيف اسمح لبرنامجي بالعمل اثناء وجوده على السيرفر وهو في حالة logoff - أن هناك نوع خاص من البرامج يعمل كخدمة (Service) - يمكن تشغيل مدير الخدمات من Run ثم services.msc - ويتم تسجيله كـ Service فى النظام ويتم تحديد إذا ما كان يبدء مع بدء التشغيل (Automatic) أم لاحقاً عند اللزوم (Manual) وهكذا، ولكن أنتبه سيكون للبرنامج جميع صلاحيات الـ SYSTEM وهى صلاحيات تفوق حتى صلاحيات الـ Administrator لذلك معظم برامج (فيروسات) الـ (Trojan) تحاول العمل كخدمة Service.

ومرفق فى هذا الموضوع مثال عملى لكيفية جعل برنامجك يعمل كـ(SYSTEM Service)، وهذه الخدمة لا تعمل مع (Win 95/98/ME)، ولكى تعمل معك بنجاح لابد أن يكون لك الصلاحيات لتسجيل خدمة داخل النظام.

حيث يتم ذلك من خلال برنامج SRVStart.exe (مرفق مع المثال) يعمل كـ (SYSTEM Service) ووظيفتة فقط أنه يقوم بتشغيل برنامج أخر أنت تقوم بتحديدة مسبقاً وسيتم تسجيله فى النظام كـ (SYSTEM Service) يمكنه أن يبدء العمل فى كل مرة تشغيل للويندوز، وقبل دخول أى مستخدم للنظام (User LogOn)، وهذا البرنامج يمكنه تسجيل خدمة أو حذفها أو بدئها، ويتم ذلك من خلال المعاملات كالتالى:

Using SRVStart.exe:
/Name:<SRVName>		Service name أسم الخدمة
/App:<AppFullPathname>	Full path for application برنامجك
/RegOnly			  Register application only, Don't start it اختيارى
/Remove			Remove Service from system (Unregister) فى حالة حذف الخدمة

فلو أفترضنا ان لديك برنامج MyService.exe تريده ان يبدء من خلال خدمات النظام (SYSTEM Services) فيتم تسجيله بالشكل التالى:

CONSOLE
SRVStart.exe /Name:MyService /App:"C:\MyTestApp\MyService.exe"

حيث MyService الأسم الذى أخترتة لهذه الخدمة، وبالطبع يمكنك إختيار أى أسم اخر، ولكن بشرط الا يتكرر، أى لو تريد بدء أكثر من برنامج، فلكل منهما اسم خدمة مختلف.

C:\MyTestApp\MyService.exe: الأسم كامل للبرنامج الذى تريد بدئه.

ستلاحظ أن تم التسجيل وبدء تشغيل البرنامج، أما فى حالة الرغبة فى التسجيل فقط دون تشغيل البرنامج (أثناء عملية Setup مثلاً) فأستخدم:

CONSOLE
SRVStart.exe /Name:MyService /App:"C:\MyTestApp\MyService.exe" /RegOnly
وفى كلا الحالتين ستلاحظ أضافة خدمة جديدة فى مدير الخدمات - شغل services.msc - بأسم Service Starter: MyService

post-98027-1174663944_thumb.jpg

ومن خلال خصائص الخدمة - الضغط بالزر الأيمن للفارة واختيار Properties (أو Double Click) - يمكنك التحكم فى الخدمة من حيث البدء الآلى (Automatic) أو اليدوى أو عدم البدء ....... الخ

post-98027-1174663957_thumb.jpg

ولحذف هذه الخدمة نهائياً من الخدمات أستخدم:

CONSOLE
SRVStart.exe /Name:MyService /Remove
وتأكد جيداً من أنك استخدمت فى الحذف نفس الأسم فى الذى استخدمتة فى التسجيل.

كما يمكنك الأستعلام عن اسم المستخدم عند بدء برنامجك (Form_Load)، فإذا كان أسم المستخدم SYSTEM تعلم أن برنامج يعمل من خلال الخدمة (SYSTEM Service) وإلا تسجيله كخدمة ثم إنهائه كى يعمل من جديد من خلال الخدمة، ويمكن أستخدام كود للتأكد من ذلك كالتالى:

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Private Sub Form_Load()
	Dim Buffer As String

	Buffer = Space$(32)
	If GetUserName(Buffer, 31) > 0 Then
		Buffer = Trim(Replace(Buffer, Chr(0), ""))
		txtUsername.Text = Buffer

		' Try to run application as NT Service
		If Buffer <> "SYSTEM" Then
			Dim szFilename As String
			szFilename = Space$(260)

			Call GetModuleFileName(0, szFilename, 260)
			szFilename = Trim(Replace(szFilename, Chr(0), ""))
			Call Shell("SRVStart.exe /Name:" & App.EXEName & " /App:" & Chr$(34) & szFilename & Chr$(34), vbHide)
			Unload Me
		End If
	End If
End Sub

post-98027-1174663966_thumb.jpg

post-98027-1174667457_thumb.jpg

وبالطبع لابد من وجود الملف SRVStart.exe أو نسخه فى مجلد النظام بدلاً من نسخه مع كل برنامج تريده يبدء من خلال الخدمة.

شكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 14 ديسمبر 2007 في 15:22

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#2

جميل و ياريت تحط مشروع كامل عن كده

حاجة واحدة ناقصة أعتقد أن هى أضافة Mutex لضمان عدم تشغيلها أكتر من مرة

#3

ما هى Mutex

#4

شكراً م. أسامة

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#5
شريف أحمد كتب:
ما هى Mutex

#6

يمكن ايضا استخدام الاداة Sc.exe عوضا عن SRVStart.exe و هي تأتي ضمن الويندوز و يمكن استخدامها مباشرة وذلك لانشاء خدمة او لحذفها

لمزيد من التفاصيل:

Using SC.EXE to Develop Windows NT Services

How to Create a Windows Service Using Sc.exe

وشكرا اخ Eng. Usama El-Mokadem على هذا الشرح الرائع

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7
Wael Dalloul كتب:
يمكن ايضا استخدام الاداة Sc.exe عوضا عن SRVStart.exe و هي تأتي ضمن الويندوز و يمكن استخدامها مباشرة وذلك لانشاء خدمة او لحذفها

لمزيد من التفاصيل:

Using SC.EXE to Develop Windows NT Services

How to Create a Windows Service Using Sc.exe

وشكرا اخ Eng. Usama El-Mokadem على هذا الشرح الرائع

Microsoft Knowledge Base Q251192 كتب:
To remotely create and start a service from the command line, you can use the SC tool (Sc.exe) included in the Resource Kit

الأخ الفاضل ...

شكراً على مرورك... وتعليقك ،

يبدو انى أهملت جزء فى شرحى وتوضيحى للموضوع، وهذا ما تفضلت ولفت نظرى إليه، فهناك بعض الفروق بين Sc.exe التى تأتى مع Windows Resource Kit وبرنامجى SRVStart.exe أهمها (وهذا جوهر الموضوع):

  • SRVStart.exe: تستطيع تشغيل اى برنامج من المستخدم SYSTEM أى يعمل من خلال Service حتى لو لم يكن مكتوباً كـ Service اى لن تغير حرفاً واحداً فى برنامجك، لكى يعمل كـ Service، فعلى سبيل المثال بتجربة تشغيل لعبة الكوتشينه التى تأتى مع ويندوز (Solitaire) - أو اى برنامج أخر - من خلال البرنامج SRVStart.exe:
    CONSOLE
    SRVStart.exe /Name:Solitaire /App:"C:\Windows\System32\sol.exe"
    وعند تشغيل Task Manager ستلاحظ ان sol.exe للمستخدم SYSTEM.
  • SC.exe: فهو يبدأ أو يسجل برنامج مكتوب فى الاساس كـ Service ، أى لا تستطيع أستخدامه فى برنامجك إذا لم يكن مكتوباً لهذا الغرض، أى لابد لك من ان تتعلم كيفية عمل وبرمجة الـ Service، وتكتب برنامج لهذا الغرض من البداية.

شكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 14 ديسمبر 2007 في 15:24

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#8

كعادتى متاخر دائما لكن ارجوا ان تضع مثال كامل على الشرح اذا لك اثقل عليك

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#9

يعني صراحه Eng. Usama El-Mokadem ما قصرت كفيت ووفيت ومستوى مواضيعك في المنتدى عالي وامكانياتك كبيره وانت مكسب لنا في المنتدى .. الف الف الف شكررررررررررررررر...

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#10

سؤال هل ممكن تشغيل هذه الخدمه على Server 2003

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#11
اقتباس
تستطيع تشغيل اى برنامج من المستخدم SYSTEM أى يعمل من خلال Service حتى لو لم يكن مكتوباً كـ Service اى لن تغير حرفاً واحداً فى برنامجك، لكى يعمل كـ Service،

معلومة جديدة بالنسبة لي, هل البرنامج SRVStart.exe يقوم بالتعديل على بنية الملف لكي يستطيع ان يعمل ك SERVICE؟

لإن بينة التطبيق لكي يعمل ك service على ما اظن انها تختلف عن بنية التطبيق لكي يعمل ضمن windows

لا اعلم الكثير من التفاصيل حول الامر, وشكرا جزيلا لك على الايضاح

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12

السلام عليك يا خي Eng. Usama El-Mokadem

شكرا علي شرحك الوافي

ولكن برنامج SRVStart.exe مش شغال

ارجوي اعاده ارفع البرنامج مره اخري ليتم الجميل

وجزاك الله كل الخير

تم تعديل هذه المشاركة بواسطة hythamzero في 28 مارس 2007 في 02:53

#13

السلام عليكم اخي Eng. Usama El-Mo تم تجربه ال services بنجاح

ولكن عند عمل logoff للجهاز يتم تحميل البرنامج ولكن البرنامج يكون في حاله not rsponding

فما هو السبب اخي

وجزاك الله كل الخير

#14

الكود شغال تمام التمام حتى في حالة الــ log off قام بعمله بالملي . هذا هو اللي كان مطلوب الله يعطيك العافيه

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#15

السلام عليكم

Eng. Usama El-Mokadem

بجد انت بتحسسنى بمتعة البرمجه اللى نفسى اوصل ليها

بس لو سمحت انا جربت البرنامج وهو شغال كويس وتمام وده المشكله

علشان هوه مش عاوز يفصل

كل ما اشغل الكمبيوتر يشتغل الفيجوال بيسك لو سمحت لو عندك فكره افصل ازاى اتفضل

وعلى فكره حضرتك انا جربت ادخل على Services

واحاول اوقفها بس مفيش فايده برده لما بعمل Restart

بيشتغل برده

Network administrator

#16

الأخ الفاضل ...

لجعل البرنامج لا يبدء Automatic عند بدء التشغيل، قم بتغير الـ Startup type من Automatic إلى Manual فى خصائص الـ Service

Service.jpg

أما لحذف الخدمه نهائياً فأستخدم المعامل Remove/ (راجع الموضوع الأصلى لمزيد من التفاصيل)، بالشكل التالى:

CONSOLE
SRVStart.exe /Name:MyService /Remove
حيث MyService أسم الخدمة التى أخترتها لهذا البرنامج (يجب الا تتكرر)

شكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 14 ديسمبر 2007 في 15:25

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#17

جهد مميز أخي أسامة ،بارك الله بك

ولكن الملف المرفق SRVStart.exe هل يمكن معرفة داخليته (السورس كود)

#18

الأخ الفاضل عبد العزيز اليوسفي

الملف تم برمجته بإستخدام ++MS-VC الإصدار 6.0 والإستعانة بمكتبة MFC

لذا منتدى Visual Basic ليس المكان المناسب لسورس كود بلغة ++C، لهذا فضلت أستخدام البرنامج كأى أداة جاهزة يتم استخدامها من خلال الـ Visual Basic، وإن شاء الله إذا سمح لى الوقت وتمكنت من صنع ملف بإستخدام Visual Basic يقوم بنفس العمل، سأقوم بطرحه مع الـ Source Code فى هذا الموضوع أو فى موضوع جديد.

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#19

مشكور أخونا الكبير أسامة ،كنت أنا طرحت موضوع في قسم الدعم وهو تشغيل البرنامج في بدء الإقلاع قبل تحميل سطح المكتب ،فهل يمكن هذا بهذه الطريقة ؟

#20

عزيزي أسامة, لا أعتقد أنه توجد إمكانية ب VB6 لعمل Windows Services

سؤال: هل توجد لهذا البرنامج مدة صلاحية معينة أم هو مجاني؟

الشكر الجزيل لهذا المجهود

#21

البرنامج مجانى تماما،

هدية لمنتدى وأعضاء الفريق العربى للبرمجة :)

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#22

أخي أسامة, شكراً جزيلاً

هذا الموضوع مغلق.

مواضيع مشابهة