PDA

View Full Version : آیا فلان سرویس نصب است؟



dkhatibi
پنج شنبه 19 بهمن 1385, 19:48 عصر
از کجا بفهمیم آیا سرویسی به نام X بر روی کامپیوتر ما نصب شده است یا خیر؟

m-khorsandi
پنج شنبه 19 بهمن 1385, 23:19 عصر
یونیت WinSvc رو Use کن و کد زیر رو امتحان کن :


procedure TForm1.Button1Click(Sender: TObject);
var
SCManHandle, SvcHandle: THandle;
begin
SCManHandle := OpenSCManager('Your_Machine_Name', nil, SC_MANAGER_CONNECT);

if (SCManHandle > 0) then
SvcHandle := OpenService(SCManHandle, 'Service_Name', SERVICE_QUERY_STATUS);

if SvcHandle > 0 then //is service installed then .....
//...

CloseServiceHandle(SvcHandle);
end;

MM_Mofidi
شنبه 21 بهمن 1385, 14:35 عصر
net start X
اینم میشه استفاده کرد

dkhatibi
شنبه 21 بهمن 1385, 16:08 عصر
net start X
اینم میشه استفاده کرد

همون کاری که من می خوام را انجام می ده؟

nasr
شنبه 21 بهمن 1385, 16:16 عصر
همون کاری که من می خوام را انجام می ده؟



net sart X

از این کد فقط میشه در Command Promt استفاده کرد

m-khorsandi
شنبه 21 بهمن 1385, 18:07 عصر
net start X


منطقی به نظر نمیاد،
شما برای اجرای این دستور باید از ShellExecute استفاده کنی،مقدار برگشتی از ShellExecute هم، Handle برنامه‌ایست که اجرا شده که عددی بزرگتر از 32 هست و کمتر/مساوی 32 هم یعنی اینکه در اجرای دستور موفق نبودیم. لیست خطاها رو میتونی از Windows SDK بگیری. با فرض اینکه 32 نوع خطای مختلف میتونیم داشته باشیم، که ظاهراً هیچکدام هم ارتباطی به سرویس‌ها ندارند، میتونی راه حل رو انتخاب کنی.


اگه به عنون راه حل، ‍CP زیر رو پیشنهاد می‌دادی بهتر بود!


SC query messenger

dkhatibi
شنبه 21 بهمن 1385, 22:47 عصر
اگه به عنون راه حل، ‍CP زیر رو پیشنهاد می‌دادی بهتر بود!


SC query messenger


بیشتر توضیح می دید؟

m-khorsandi
شنبه 21 بهمن 1385, 23:20 عصر
SC یک Command Prompt هست که با پارامترهای مذکور، گزارشی از وضعیت سرویس
نامبرده رو در اختیارت قرار میده. من پست دوم رو بهت پیشنهاد میکنم:لبخندساده:

MM_Mofidi
سه شنبه 24 بهمن 1385, 10:04 صبح
نظر m-khorsandi کاملا در این مورد صحیح است من فقط راهکار ارائه دادم روشهای مختلفی برای دریافت خروجی برنامه هست.شما حتی میتونید با api نتایج CMD را به یک txtbox منتقل (redirect) کنید.
به هر حال اگر قصد استفاده در بدنه برنامه دارید از راه حلهای ارائه شده یا Api های مربوطه استفاده کنید بهتر است.
از msdn
http://msdn2.microsoft.com/en-us/library/ms685942.aspx
http://msdn2.microsoft.com/en-us/library/ms684941.aspx
http://msdn2.microsoft.com/en-us/library/ms685996.aspx

m-khorsandi
سه شنبه 24 بهمن 1385, 12:11 عصر
ممنون از لیکنهایی که گذاشتی،
دستوراتی که برای چک کردن سرویس نوشتم، همان توابع API هستند که توسط دلفی wrap شدند.