উইন্ডোজ পরিষেবা চালু থাকলে কীভাবে যাচাই করতে পারি


182

আমার সি # তে একটি অ্যাপ্লিকেশন রয়েছে (এক্সপি এম্বেডে থাকা 2.0.) যা একটি 'ওয়াচডগ' এর সাথে যোগাযোগ করছে যা একটি উইন্ডোজ পরিষেবা হিসাবে প্রয়োগ করা হয়। ডিভাইস বুট হয়ে গেলে, এই পরিষেবাটি সাধারণত শুরু হতে কিছুটা সময় নেয়। আমি পরিষেবাটি চলমান থাকলে আমার কোড থেকে চেক করতে চাই। আমি কীভাবে এটি সম্পাদন করতে পারি?


1
.NET এ সার্ভিস কন্ট্রোলার অবজেক্টটি একবার দেখুন ।
ল্যারি

ওহ ... ডাব্লুএমআই এর মাধ্যমে আপনার নিজের রোলিংয়ের চেয়েও ভাল। আমি আমার উত্তর সরিয়ে ফেলব।
ইবিগ্রিন

@ ইগ্রগ্রিন - আমি জানি না, ডাব্লুএমআই রুট ভবিষ্যতে অন্য কারও পক্ষে উপযোগী হতে পারে, বিড়ালের চামড়ার একাধিক উপায় ছাড়াও আরও অনেক কিছু থাকতে পারে ....
কার্ল

হ্যাঁ, তবে আমি সত্যিই মনে করি সার্ভিস কন্ট্রোলারটি সর্বোপরি ভাল, তাই আমি মনে করি আমি এটি মুছে ফেলব। আমি কখনও জেগে না থাকলে আমি কখনও ডাব্লুএমআই-এর পরামর্শও দিতাম না। :)
ইবিগ্রিন

উত্তর:


366

আমার ধারণা এইরকম কিছু কাজ করবে:

যোগ System.ServiceProcessআপনার প্রকল্পের রেফারেন্স (এটা .NET ট্যাবে থাকবে) জন্য।

using System.ServiceProcess;

ServiceController sc = new ServiceController(SERVICENAME);

switch (sc.Status)
{
    case ServiceControllerStatus.Running:
        return "Running";
    case ServiceControllerStatus.Stopped:
        return "Stopped";
    case ServiceControllerStatus.Paused:
        return "Paused";
    case ServiceControllerStatus.StopPending:
        return "Stopping";
    case ServiceControllerStatus.StartPending:
        return "Starting";
    default:
        return "Status Changing";
}

সম্পাদনা করুন: এমন একটি পদ্ধতিও রয়েছে sc.WaitforStatus()যা পছন্দসই স্থিতি এবং সময়সীমা গ্রহণ করে, এটি কখনও ব্যবহার করে না তবে এটি আপনার প্রয়োজনের সাথেও মানিয়ে নিতে পারে।

সম্পাদনা করুন: একবার আপনি স্থিতিটি পেয়ে গেলে, আবার স্থিতি পাওয়ার জন্য আপনাকে sc.Refresh()প্রথমে কল করতে হবে ।

রেফারেন্স: .NET এ সার্ভিস কন্ট্রোলার অবজেক্ট।


11
সার্ভিস কন্ট্রোলার.গেট সার্ভিসেস () একটি অ্যারে পুনরুদ্ধার করে যা সার্ভিস কনট্রোলার অবজেক্ট হিসাবে সমস্ত ইনস্টল করা পরিষেবা ধারণ করে। এটি অনেক সাহায্য করতে পারে।
ল্যারি

9
সিস্টেম.সোসভারপ্রসেসে রেফারেন্স যুক্ত করুন এবং বিবৃতি যুক্ত করুন: সিস্টেম.সোর্সেসপ্রসেস ব্যবহার করে;
নিলওয়াল্টার্স

6
যদি আমি কোনও খারাপ পরিষেবার নাম পাস করি তবে মনে হয় কোনও ত্রুটি ছুঁড়ে ফেলার পরিবর্তে এটি লক হয়ে গেছে। আমি এই কোডটি যুক্ত করেছি: ধরা (System.Exception ex) {প্রত্যাবর্তন "পাওয়া গেল না"; }
নিলওয়াল্টার্স

6
নিলওয়াল্টার্স: আপনি কীভাবে জানবেন যে পরিষেবাটি পাওয়া যায় নি বলে ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছিল? ধরার জন্য কি আরও উপযুক্ত ব্যতিক্রম ধরনের নেই?
প্যাট্রিক সোভেনসন

3
প্রাইভেট স্ট্যাটিক বুল সার্ভিসএক্সিস্টস (স্ট্রিং সার্ভিসনেম) Service সার্ভিস কন্ট্রোলার.গেট সার্ভিসেস () ফিরে আসুন ফার্স্টঅরডাফল্ট (গুলি => এস। সার্ভিসনাম == সার্ভিসনাম)! = নাল; }
দিমিত্রি পাভলভ

16

আপনি এখানে আপনার স্থানীয় মেশিনে সমস্ত উপলভ্য পরিষেবা এবং তাদের স্থিতি পাবেন।

ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
    Console.WriteLine(service.ServiceName+"=="+ service.Status);
}

আপনি নিজের পরিষেবার সাথে সার্ভিসটির তুলনা করতে পারবেন। বিশদগুলির জন্য http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx- এর সাথেও যান http: //msdn.mic Microsoft.com/en-us/library/microsoft.windows.design .servicemanager (উ = vs.90) .aspx

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.