PDA

View Full Version : چگونگی کار با service application در دلفی



omid_hasanpur
یک شنبه 26 مهر 1383, 11:41 صبح
دوستان سلام
می خواستم در مورد چگونگی نوشتن یک سرویس در دلفی و کاربردهای آن مطالبی بنویسم
اگر علاقه مند هستید بگویید تا ادامه بدهم

مهدی کرامتی
یک شنبه 26 مهر 1383, 13:59 عصر
نیکی و پرسش؟ :)

omid_hasanpur
دوشنبه 27 مهر 1383, 08:10 صبح
خوب ابتدا توضیحی کوتاه در مورد service ها :
حتما تا کنون در windows xp پیش آمده که کلیدهای cntrl+Alt+Delete را فشار دهید.
با این کار صفحه Windows task manager باز میشود و یکی از tab های آن Processes
می باشد.در این tab تعدادی برنامه با پسوند EXE که در حال حاضر در حال اجرا بر روی کامپیوتر شما هستند همراه با درصدی از cpu و memory که توسط هر کدام از آنها مورد استفاده قرار می گیرد نشان داده شده اند.
اگر با دقت بیشتری به این لیست نگاه کنید متوجه خواهید شد که تعدادی از برنامه های نصب شده بر روی سیستم شما به همراه سرویسهایی که وظیفه انجام امور اصلی و داخلی windows را بر عهده دارند در این لیست قرار گرفته اند.
حال به عنوان یک برنامه نویس دلفی آیا ما میتوانیم یک Service برای برنامه خود ایجاد کنیم و مزیت و کاربردهای برنامه نویسی به صورت سرویس چیست؟
جواب سوال اول مثبت است.به قول برنامه نویسان متعصب دلفی که من هم عضو کوچکی از آنها هستم پادشاه و یگانه سلطان زبانهای برنامه نویسی از اول خلقت کدنویسی همانا دلفی عزیز و اجداد گرامش هستند:تشویق:.
مثل اینکه از بحث دور شدیم.
همانطور که گفتم ما می توانیم در دلفی service مورد نظر خود را ایجاد کنیم.
کافی است در File/New گزینه Service Application را انتخاب کرده و آنگاه منتظر شاهکار دلفی بمانیم.لازم به ذکر است که من این موضوع را در دلفی هفت توضیح می دهم.
وقتی یک Service در ویندوز نصب می شود در پشت پرده و بدون اینکه نیازی به متوجه بودن کابر باشد اعمال مورد نظر برنامه نویس انجام می شود.در حقیقت یک Service را می توان به منزله یک ربات دانست که امور محوله را به نحو احسن در سیستم انجام میدهد.
برای روشن شدن موضوع یک مثال میزنم : یکی از سرویسهایی که می توان مثال زد سیستم هشدار در ساعت معین است.اگر این برنامه به صورت یک سرویس نوشته شود و در مجموعه سرویسهای ویندوز نصب شود هر بار پس از روشن شدن سیستم به صورت اتوماتیک بارگزاری شده و منتظر روی دادن تاریخ و ساعت معین میشود.در صورت رسیدن به آن زمان پیام یا آلارمی که قبلا تعریف شده است را اجرا میکند.
یکی از بهترین مزیت های برنامه نویسی به صورت سرویس این است که اگر یک سرویس بر روی سیستمی در حال اجرا باشد حتا اگر آن سیستم در حالت Log off هم قرار داشته باشد سرویس مورد نظر وظیفه خود را به خوبی انجام میدهد.مثلا در مثال قبلی فرض کنید موقع هشدار وقتی باشد که کامپیوتر Log off است.
در این صورت باز هم سرویس آلارم مورد نظر را پخش خواهد کرد.
مثل اینکه زیادی صحبت کردم. انشاء الله در مورد چگونگی نوشتن سرویس در دلفی و همچنین مزیتهای دیگر این نوع برنامه نویسی باز هم مینویسم البته به شرطی که نظر بدهید و اگر جایی اشتباهی دارم به من تذکر دهید.منتظر نظرات شما هستم.

omid_hasanpur
سه شنبه 28 مهر 1383, 08:56 صبح
با تشکر از دوستانی که باعث تشویق من در ادامه این موضوع شدند بحث را ادامه می دهم :
امروز در مورد ساختن یک پروژه آزمایشی صحبت میکنم. پس بدون مقدمه اضافی کار را شروع می کنیم.
دلفی عزیز را باز کنید و از تب File/New گزینه Service Application را انتخاب فرمایید.
با این کار پروژه جدیدی باز می شود که شامل یک module به نام Service1 می باشد که کامپوننتهای مورد نیاز خود را می توانید روی آن قرار دهید.
شما در پروژه خود یک شی از نوع Tservice1 دارید که قسمت اصلی کار ما می باشد.
در object inspector خاصیت displayname سرویس خود را به Mytstsrv تغییر دهید.این نامی است که سرویس با آن نمایش داده می شود و در ادامه متوجه نقش آن خواهید شد.
حال اول ببینیم دوست داریم این سرویس چه عملی برای ما انجام دهد.بیایید یک کار ساده از سرویس خود بخواهیم.به این صورت که هر 10 ثانیه یک مرتبه پیامی نمایش داده شود.
پس برای این منظور از تب system یک timer به پروژه خود اضافه کنید و خاصیت Interval آنرا روی 10000 تنظیم کنید.
در ادامه در on timer مربوط به شی timer کد زیر را وارد کنید:

Showmessage(‘My Service is work currently!!’);
خوب همین!!.
حال بیایید سرویس خود را اجرا کنیم. برای اینکه سرویسی که نوشته اید بر روی سیستم نصب شود باید آنرا با پارامتر /Install اجرا کنید. پس به قسمت Run/Parameters رفته و در محل Parameters این عنوان را اضافه کنید :/install
حال اگر برنامه را Run کنید سرویس شما بر روی کامپیوتر نصب می شود.
برای اینکه سرویس خود را ببینید به Control Panel/Administrative Tools رفته و وارد Services شوید.
در این پنجره کلیه سرویسهایی که روی کامپیوتر شما Install شده اند نشان داده می شود.
حال به دنبال سرویس خود با نام Mytstserv بگردید.
پس از یافتن آنرا انتخاب کنید و در سمت چپ گزینه Start را انتخاب کنید.با این کار Service شما اجرا
می شود و شروع به اجرای فرامین شما می کند.
لازم است این را هم اضافه کنم که شما در خود پروژه هم می توانید با دستوری پس از Install شدن سرویس آنرا اجرا کنید که در فرصت مناسب به آن اشاره خواهم کرد.
خوب پس از طی مراحل فوق سرویس آماده خدمت گزاری به شماست.از این پس هر بار پس ازروشن شدن کامپیوتر به صورت خودکار سرویس شما Start شده و ماموریت خود را در پشت پرده انجام می دهد.
یک نکته دیگر باقی مانده و آن هم طریقه UnInstall کردن سرویسمان است.
برای این کار ابتدا به Services بروید و پس از انتخاب سرویس خود از سمت چپ گزینه Stop را انتخاب کنید.حال سرویس خود را اینبار با پارامتر /UnInstall اجرا کنید. پیامی مبنی بر اینکه سرویس از سیستم حذف شد دریافت خواهید کرد.
البته هنوز موارد ناگفته زیادی باقی مانده که اگر عمری باقی بود به مرور بیان میکنم.
خوب فکر کنم حسابی کیف کردید.من که وقتی اولین سرویس خود را نوشتم خیلی ذوق زده شدم.امیدوارم شما حتما حتما سراغ دلفی رفته و سرویس نویسی را امتحان کنید و نتایجی که بدست می آورید را در اینجا برای بقیه بازگو کنید.من منتظرم.
حال کمی قوه تخیل خود را پرواز بدهید و ببینید با یک سرویس چه کارهایی می توان انجام داد:
یکی را من می گویم. شما می توانید یک روباط هوشمند طراحی کنید.آنرا در کامپیوتر خود قرار دهید و سپس از طریق اینترنت به کامپیوترتان وصل شده و از راه دور سیستم خود را کاملا هدایت کنید.
البته این کار مستلزم دانستن روش کار با کامپوننتهای دیگر دلفی هم هست که اگر من اینجا ماندگار بودم و دوستان علاقه داشتند در مورد آنها هم صحبت خواهم کرد.
شما هم ایده های خود را در مورد وظایفی که یک سرویس می تواند انجام دهد بیان کنید تا بهترین آنها را انتخاب کرده و به کمک هم آنرا پیاده سازی کنیم.
پس عجله کنید و دوگوله خودتونو به کار بندازید.:mrgreen:
فعلا Bye .

saeed_d
شنبه 02 آبان 1383, 15:04 عصر
دوست عزیز سلام
با تشکر از مطلب جالبتان.
متاسفانه تمام کارهاپی را که نوشته بودید انجام دادم . بعد از Start کردن سرویس در Services هیچ اتفاقی نیافتاد. یعنی پس از 10 ثانیه پیغامی ظاهر نشد. مشکل از کجا می‌تواند باشد؟ :گیج:
:تشویق: :flower:

m_reza
شنبه 02 آبان 1383, 16:53 عصر
منم همین مشکل را دارم ( بعد از Start کردن هیچ سرویسی اجرا نشد ) :(

omid_hasanpur
یک شنبه 03 آبان 1383, 13:48 عصر
با عرض پوزش از همگی دوستان. من مهمترین نکته در نوشتن سرویس را فراموش کردم بگویم.لطفا ابتدا به services درcontrol panel رفته و سرویس خود را بیابید و آنرا stop کنید.
سپس دلفی را اجرا نموده و برنامه ای که نوشته اید را باز کنید و آنرا با /uninstall اجرا کنید.
حال در on execute مربوط به service (یکی از event های سرویس است) کد زیر را وارد کنید :

while not Terminated do
ServiceThread.ProcessRequests(True);// wait for termination
در ادامه برنامه را به روشی که قبلا شرح داده ام اجرا کنید. حتما موفق می شوید.
لطفا نتیجه را حتما حتما بگویید.
الان متاسفانه فرصت توضیح ندارم اگر خواستید بگویید تا کد بالا را توضیح دهم.
منتظر نظرات شما هستم.
خداحافظ

saeed_d
دوشنبه 04 آبان 1383, 14:24 عصر
سلام
باز هم مشکل من حل نشد :گیج:
اگه ممکنه توضیح بیشتری بدهید
متشکرم

omid_hasanpur
چهارشنبه 06 آبان 1383, 11:11 صبح
سلام
لطفا در OnStartمربوط به Serviceخود یک showmessageقرار دهید.باید بعد از نصب سرویستان و پس از هر بار بالا آمدن ویندوز آن پیام نشان داده شود .
اگر پیام درست نشان داده شد مشخص می شود که شما سرویس را درست نوشته و نصب کرده اید.
در غیر اینصورت یکبار دیگر کد سرویس خود را بررسی کنید.

m_reza
چهارشنبه 06 آبان 1383, 11:29 صبح
کد قبلی را امتحان کردم، اما باز هم فایده ای نداشت. :(

omid_hasanpur
چهارشنبه 06 آبان 1383, 12:09 عصر
کدام کد را امتحان کردید؟
آیا سرویس شما در لیست سرویسها قرار می گیرد؟

m_reza
چهارشنبه 06 آبان 1383, 13:54 عصر
تمام مراحلی را که گفتید پیاده سازی شد . پس از اجرای برنامه پیغام نمایش داده می شود اما این سرویس به لیست سرویس های ویندوز اضافه نشده و پس از نمایش پیغام برنامه بسته می شود .

omid_hasanpur
پنج شنبه 07 آبان 1383, 07:19 صبح
اگر پیامی که در onstartسرویس خود قرار داده اید را بعد از هر بار راه اندازی مجدد ویندوز مشاهده می کنید نشان می دهد که سرویس شما نصب است.
برای آگاه شدن از این موضوع شما دو کار می توانید انجام دهید.
یکی اینکه سرویس خود را بار دیگر با install/اجرا کنید در این صورت باید پیغام خطایی مبنی بر اینکه این سرویس در حال حاضر بر روی سیستم شما نصب است را دریافت کنید .
راه دوم این است که به control panel/administrative tools/servicesبروید و در لیست سرویسهای موجود دنبال نام سرویس خود که در قسمت display nameوارد کرده بودید بگردید اگر آنرا پیدا کردید مشخص می شود که سرویس شما نصب شده است.
در ضمن بار اولی که سرویس خود را با install/جرا می کنید باید پیام زیر را دریافت کنید که نشانگر آن است که سرویس شما با موفقیت نصب شده است :
service installed successfuly
شما آیا پیام بالا را دریافت کرده اید؟
Bye. :wink:

m_reza
پنج شنبه 07 آبان 1383, 19:04 عصر
خیر. همچین پیامی دریافت نمی کنم.

m_reza
پنج شنبه 07 آبان 1383, 23:28 عصر
بالاخره مشخص شد که اشکال در نوشتن عبارت Install بود . شما گفته بود عبارت /Install اجرا کنیم. در صورتیکه نحوه نوشتن به این صورت است install/ . در هر صورت این سرویس اجرا شد و در لیست سرویسهای ویندوز نیز قرار دارد . در ابتدای اجرای آن هم پیغامی مبنی بر با موفقیت بودن کار نمایش داده می شود.

حال زمانی که ویندوز مجددا اجرا می شود این سرویس در لیست سرویس ها قرار دارد و در حالت Start نیز می باشد اما مشکل این است که رویداد مورد نظر را انجام نمی دهد. یعنی در مثالی که شما زدید Showmessege با بازه زمانی هر 10 ثانبه یکبار اجرا نمی شود . این در حالیست که اگر برنامه را دوباره اجرا کنیم (منظورم سرویس نیست ) آن پیغام برای 2 بار اجرا شده ( دو بار پیغام نمایش داده می شود ) و دیگر اجرا نمی شود .

hghodsi
دوشنبه 11 آبان 1383, 07:22 صبح
چگونه می توان در این سرویس یک یا چند برنامه را اجرا کرد ؟ یعنی مثلا یک یا چند برنامه exe در زمانها مختلف ؟ :flower:

omid_hasanpur
دوشنبه 11 آبان 1383, 08:12 صبح
با دستور winexecمی توانید فایلهای exeرا اجرا کنید ولی منظورتان از زمانهای مختلف را نمی فهمم.
bye

hghodsi
چهارشنبه 13 آبان 1383, 12:43 عصر
مثلا در ساعت 14 برنامه شماره 1 شروع و 30 دقیقه بعد پایان یابد یا هر یک دقیقه یکبار اجرا شود.

BOB
پنج شنبه 14 آبان 1383, 04:42 صبح
سلام.
این بحث کم کم داره خطرناک میشه . مواظب باشید به سمت مصارف illegal منحرف نشه .
در هر صورت از مقاله مفیدتون متشکرم.

omid_hasanpur
پنج شنبه 14 آبان 1383, 07:21 صبح
همونطوری که گفتم شما با دستور winexecمیتونید این کارو انجام بدین
دقیقا چه کاری میخواهید انجام بدین؟

MiRHaDi
چهارشنبه 27 آبان 1383, 00:12 صبح
سلام
منم میکنم نمیشه !
توی لیست میاد
Start میشه ( اگه توی onstart هیچی نباشه ) اگه باشه میگه نمیتونم
کاری نمیکنه !
دوباره که اجرا میکنم 2 3 تا میسیج خودم میاد
بعد هم هیچی
بای

shayan_delphi
چهارشنبه 02 آذر 1384, 06:26 صبح
سلام
اگر تا مرحله مربوط به تاپیک7# را انجام بدید و مقدار پارامتر را Install/ و خاصیت Interactive=True (در Object inspector) تنظیم کنید مشکل حل می شود.

MiRHaDi
سه شنبه 20 دی 1384, 00:19 صبح
سلام
بقیه این مقاله چی شد ؟
بای

realman
پنج شنبه 25 اسفند 1384, 17:19 عصر
میشه لطف کنید این مقاله رو ادامه بدید.واقعا جالب بود.
متشکرم.

saeed_d
جمعه 26 اسفند 1384, 14:16 عصر
سلام
من مطالب این تاپیک رو جمع آوری کردم و اینجوری تونستم یه ServiceApplication یسازم که هر 10 ثانیه یه پیغام رو نشون بدهد:

برای نوشتن یک Service Application که بتواند هر 10 ثانیه یک پیغام نشان دهد:
ابتدا از منوی file گزینه New را انتخاب کرده و سپس روی گزینه Other کلیک کنید بعد در پنجره باز شده از سربرگ New گزینه ServiceApplication را انتخاب کنید. با انجام این کار یک کلاس با نام TService1 ایجاد می شود که می توانید با قرار دادن هر شیء مورد دلخواه بر روی فرم آن برنامه خود را بنویسید. برای برنامه ما از سربرگ System یک Timer بر روی سرویس گذاشته و خاصیت Interval آن را 10000 بگذارید. حال در رویداد OnTimer کد زیر را بنویسید:

Showmessage('My Service is worked currently');
خاصیت DisplayName مربوط به Service1 را به MyTstSrv تغییر دهید. این نام بعد از اجرای سرویس در لیست سرویسها ظاهر می شود.
خاصیت Interactive مربوط به Service1 را به True تغییر دهید.
در رویداد OnExecute مربوط به Service1 کد زیر را بنویسید:

while not Terminated do
ServiceThread.ProcessRequests(True);// wait for termination
حال موقع نصب سرویس بر روی ویندوز رسیده است. برای اینکار باید برنامه را با پارامتر /install اجرا کنید. پس در دلفی به منوی Run رفته و روی گزینه Parameters کلیک کنید. در این پنجره در کادر مربوط به Parameters عبارت /install را تایپ کنید و روی Ok کلیک کنید. حال برنامه را اجرا کنید. اگر همه مراحل را بدرستی انجام داده باشید پیغام Service installed successfully ظاهر می شود.
حال باید به لیست سرویسهای ویندوز بروید و سرویس خود را Start کنید. (این سرویس می تواند با restart شدن ویندوز نیز Start شود) برای این کار به Control Panel رفته و پنجره Administrative Tools را باز کنید. در این پنجره روی گزینه Services دابل کلیک کنید. با انجام این کار یک پنجره باز می شود که نام تمامی سریسهای نصب شده برروی ویندوز وجود دارند. نام MyTstSrv را پیدا کرده و روی آن کلیک راست کنید و سپس گزینه Start را انتخاب کنید. با انجام این کار سرویس شما Start شده و باید هر 10 ثانیه یکبار پیام شمار را نمایش دهد.
برای حذف کردن سرویس از روی ویندوز باید برنامه را با پارامتر /Uninstall اجرا کنید. با انجام این کار پیام Service Uninstalled Successfully ظاهر می شود.

saeed_d
جمعه 26 اسفند 1384, 14:21 عصر
با عرض معذرت در نوشته های بالا علامت / را قبل از install و uninstall بنویسید

hojjatcroos
دوشنبه 23 دی 1387, 12:16 عصر
چند تا سوال داشتم فرق Service و Service Appilications چیه و پارامترهای Service Type و Start Type چه کاربردی دارند.

MOJTABAATEFEH
جمعه 10 مهر 1388, 11:31 صبح
در لسيت proccess هاي ويندوز به اسم ديگري نشان داده ميشه و اينكه با end كردن آن سرويس مورد نظر Stop مي شود چطور مي توان با همان اسم در TaskManager نمايشش داد و اينكه با End كردن از كار نيفته و دوباره اجرا شود مثل بعضي Service هاي خود ويندوز كه بسته مي شوند و براي لحظه اي از ليست Proccess ها حذف مي شوند اما دوباره اجرا مي شوند

با تشكر

1485159
سه شنبه 08 دی 1388, 19:50 عصر
من توی نصب کردن سرویس مشکل دارم، وقتی مینویسم:

install
هیچ اتفاقی نمیافته ولی وقتی مینویسم:

/install
با خطای زیر مواجه میشم:

siavash_fe
سه شنبه 25 اسفند 1388, 10:52 صبح
سلام به همه
کسی رو windows 7 سرویس نصب کرده .
نصب نمیشه باید چکار کرد

mossaferin
پنج شنبه 30 اردیبهشت 1389, 09:36 صبح
سلام



کسی رو windows 7 سرویس نصب کرده .
نصب نمیشه باید چکار کرد


حتما باید با administrator وارد شده باشی

اگر باز هم نشد ، توی منوی start ، accessories،روی command prompt رایت کلیک کنید و گزینه run as administrator رو انتخاب کن بعد توی محیطی که باز میشه سعی کن که سرویس رو نصب کنی

موفق باشی

ashoori
چهارشنبه 29 دی 1389, 23:41 عصر
سرویس با موفقیت نصب میشه ولی هیچ عکس العملی نشون نمیده! نه در xp و نه در 7!!!
مشکل کجاست!؟
همه موارد در پستهای قبلی رعایت شده! ولی همچنان بی نتیجه...
لطفا دوستان این تاپیک را پیگیری بفرمایید.
باتشکر خاص از آقای کشاورز:قلب:

mahdy.asia
چهارشنبه 25 خرداد 1390, 09:36 صبح
من كه دقيق موارد را انجام دادم اما نه پيغام sucses برام آمد و نه سرويس نصب شد ويندوز هم xp سرويس پك 3
است