دوستان سلام
می خواستم در مورد چگونگی نوشتن یک سرویس در دلفی و کاربردهای آن مطالبی بنویسم
اگر علاقه مند هستید بگویید تا ادامه بدهم
دوستان سلام
می خواستم در مورد چگونگی نوشتن یک سرویس در دلفی و کاربردهای آن مطالبی بنویسم
اگر علاقه مند هستید بگویید تا ادامه بدهم
خوب ابتدا توضیحی کوتاه در مورد 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 است.
در این صورت باز هم سرویس آلارم مورد نظر را پخش خواهد کرد.
مثل اینکه زیادی صحبت کردم. انشاء الله در مورد چگونگی نوشتن سرویس در دلفی و همچنین مزیتهای دیگر این نوع برنامه نویسی باز هم مینویسم البته به شرطی که نظر بدهید و اگر جایی اشتباهی دارم به من تذکر دهید.منتظر نظرات شما هستم.
با تشکر از دوستانی که باعث تشویق من در ادامه این موضوع شدند بحث را ادامه می دهم :
امروز در مورد ساختن یک پروژه آزمایشی صحبت میکنم. پس بدون مقدمه اضافی کار را شروع می کنیم.
دلفی عزیز را باز کنید و از تب 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 .
دوست عزیز سلام
با تشکر از مطلب جالبتان.
متاسفانه تمام کارهاپی را که نوشته بودید انجام دادم . بعد از Start کردن سرویس در Services هیچ اتفاقی نیافتاد. یعنی پس از 10 ثانیه پیغامی ظاهر نشد. مشکل از کجا میتواند باشد؟
:flower:
منم همین مشکل را دارم ( بعد از Start کردن هیچ سرویسی اجرا نشد ) :(
با عرض پوزش از همگی دوستان. من مهمترین نکته در نوشتن سرویس را فراموش کردم بگویم.لطفا ابتدا به services درcontrol panel رفته و سرویس خود را بیابید و آنرا stop کنید.
سپس دلفی را اجرا نموده و برنامه ای که نوشته اید را باز کنید و آنرا با /uninstall اجرا کنید.
حال در on execute مربوط به service (یکی از event های سرویس است) کد زیر را وارد کنید :
while not Terminated do
ServiceThread.ProcessRequests(True);// wait for termination
در ادامه برنامه را به روشی که قبلا شرح داده ام اجرا کنید. حتما موفق می شوید.
لطفا نتیجه را حتما حتما بگویید.
الان متاسفانه فرصت توضیح ندارم اگر خواستید بگویید تا کد بالا را توضیح دهم.
منتظر نظرات شما هستم.
خداحافظ
سلام
باز هم مشکل من حل نشد
اگه ممکنه توضیح بیشتری بدهید
متشکرم
سلام
لطفا در OnStartمربوط به Serviceخود یک showmessageقرار دهید.باید بعد از نصب سرویستان و پس از هر بار بالا آمدن ویندوز آن پیام نشان داده شود .
اگر پیام درست نشان داده شد مشخص می شود که شما سرویس را درست نوشته و نصب کرده اید.
در غیر اینصورت یکبار دیگر کد سرویس خود را بررسی کنید.
کد قبلی را امتحان کردم، اما باز هم فایده ای نداشت. :(
کدام کد را امتحان کردید؟
آیا سرویس شما در لیست سرویسها قرار می گیرد؟
تمام مراحلی را که گفتید پیاده سازی شد . پس از اجرای برنامه پیغام نمایش داده می شود اما این سرویس به لیست سرویس های ویندوز اضافه نشده و پس از نمایش پیغام برنامه بسته می شود .
اگر پیامی که در onstartسرویس خود قرار داده اید را بعد از هر بار راه اندازی مجدد ویندوز مشاهده می کنید نشان می دهد که سرویس شما نصب است.
برای آگاه شدن از این موضوع شما دو کار می توانید انجام دهید.
یکی اینکه سرویس خود را بار دیگر با install/اجرا کنید در این صورت باید پیغام خطایی مبنی بر اینکه این سرویس در حال حاضر بر روی سیستم شما نصب است را دریافت کنید .
راه دوم این است که به control panel/administrative tools/servicesبروید و در لیست سرویسهای موجود دنبال نام سرویس خود که در قسمت display nameوارد کرده بودید بگردید اگر آنرا پیدا کردید مشخص می شود که سرویس شما نصب شده است.
در ضمن بار اولی که سرویس خود را با install/جرا می کنید باید پیام زیر را دریافت کنید که نشانگر آن است که سرویس شما با موفقیت نصب شده است :
service installed successfuly
شما آیا پیام بالا را دریافت کرده اید؟
Bye. :wink:
خیر. همچین پیامی دریافت نمی کنم.
بالاخره مشخص شد که اشکال در نوشتن عبارت Install بود . شما گفته بود عبارت /Install اجرا کنیم. در صورتیکه نحوه نوشتن به این صورت است install/ . در هر صورت این سرویس اجرا شد و در لیست سرویسهای ویندوز نیز قرار دارد . در ابتدای اجرای آن هم پیغامی مبنی بر با موفقیت بودن کار نمایش داده می شود.
حال زمانی که ویندوز مجددا اجرا می شود این سرویس در لیست سرویس ها قرار دارد و در حالت Start نیز می باشد اما مشکل این است که رویداد مورد نظر را انجام نمی دهد. یعنی در مثالی که شما زدید Showmessege با بازه زمانی هر 10 ثانبه یکبار اجرا نمی شود . این در حالیست که اگر برنامه را دوباره اجرا کنیم (منظورم سرویس نیست ) آن پیغام برای 2 بار اجرا شده ( دو بار پیغام نمایش داده می شود ) و دیگر اجرا نمی شود .
چگونه می توان در این سرویس یک یا چند برنامه را اجرا کرد ؟ یعنی مثلا یک یا چند برنامه exe در زمانها مختلف ؟ :flower:
با دستور winexecمی توانید فایلهای exeرا اجرا کنید ولی منظورتان از زمانهای مختلف را نمی فهمم.
bye
مثلا در ساعت 14 برنامه شماره 1 شروع و 30 دقیقه بعد پایان یابد یا هر یک دقیقه یکبار اجرا شود.
سلام.
این بحث کم کم داره خطرناک میشه . مواظب باشید به سمت مصارف illegal منحرف نشه .
در هر صورت از مقاله مفیدتون متشکرم.
همونطوری که گفتم شما با دستور winexecمیتونید این کارو انجام بدین
دقیقا چه کاری میخواهید انجام بدین؟
سلام
منم میکنم نمیشه !
توی لیست میاد
Start میشه ( اگه توی onstart هیچی نباشه ) اگه باشه میگه نمیتونم
کاری نمیکنه !
دوباره که اجرا میکنم 2 3 تا میسیج خودم میاد
بعد هم هیچی
بای
سلام
اگر تا مرحله مربوط به تاپیک7# را انجام بدید و مقدار پارامتر را Install/ و خاصیت Interactive=True (در Object inspector) تنظیم کنید مشکل حل می شود.
میشه لطف کنید این مقاله رو ادامه بدید.واقعا جالب بود.
متشکرم.
سلام
من مطالب این تاپیک رو جمع آوری کردم و اینجوری تونستم یه 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 ظاهر می شود.
با عرض معذرت در نوشته های بالا علامت / را قبل از install و uninstall بنویسید
چند تا سوال داشتم فرق Service و Service Appilications چیه و پارامترهای Service Type و Start Type چه کاربردی دارند.
در لسيت proccess هاي ويندوز به اسم ديگري نشان داده ميشه و اينكه با end كردن آن سرويس مورد نظر Stop مي شود چطور مي توان با همان اسم در TaskManager نمايشش داد و اينكه با End كردن از كار نيفته و دوباره اجرا شود مثل بعضي Service هاي خود ويندوز كه بسته مي شوند و براي لحظه اي از ليست Proccess ها حذف مي شوند اما دوباره اجرا مي شوند
با تشكر
من توی نصب کردن سرویس مشکل دارم، وقتی مینویسم:
install
هیچ اتفاقی نمیافته ولی وقتی مینویسم:
/install
با خطای زیر مواجه میشم:
سلام به همه
کسی رو windows 7 سرویس نصب کرده .
نصب نمیشه باید چکار کرد
سلام
حتما باید با administrator وارد شده باشیکسی رو windows 7 سرویس نصب کرده .
نصب نمیشه باید چکار کرد
اگر باز هم نشد ، توی منوی start ، accessories،روی command prompt رایت کلیک کنید و گزینه run as administrator رو انتخاب کن بعد توی محیطی که باز میشه سعی کن که سرویس رو نصب کنی
موفق باشی
سرویس با موفقیت نصب میشه ولی هیچ عکس العملی نشون نمیده! نه در xp و نه در 7!!!
مشکل کجاست!؟
همه موارد در پستهای قبلی رعایت شده! ولی همچنان بی نتیجه...
لطفا دوستان این تاپیک را پیگیری بفرمایید.
باتشکر خاص از آقای کشاورز
من كه دقيق موارد را انجام دادم اما نه پيغام sucses برام آمد و نه سرويس نصب شد ويندوز هم xp سرويس پك 3
است