পুনরায় চালু করতে উইন্ডোজ পরিষেবা পুনরুদ্ধার কর্মের সাথে ইনস্টল করুন


89

আমি ক্লাস ServiceProcessInstallerএবং ServiceInstallerক্লাস ব্যবহার করে একটি উইন্ডোজ পরিষেবা ইনস্টল করছি ।

আমি ServiceProcessInstallerপ্রারম্ভের ধরণ, নাম ইত্যাদি সেট করতে ব্যবহার করেছি তবে পুনরুদ্ধারে পুনরুদ্ধারের ব্যবস্থাটি কীভাবে সেট করব?

আমি জানি যে পরিষেবাগুলি ম্যানেজমেন্ট কনসোলে গিয়ে পরিষেবাটির সম্পত্তিগুলির পুনরুদ্ধার ট্যাবে সেটিংস পরিবর্তন করে ম্যানুয়ালি এটি করতে পারি তবে ইনস্টলের সময় এটি করার কোনও উপায় আছে কি?

পরিষেবা সম্পত্তি পুনরুদ্ধার ট্যাব

উত্তর:


99

আপনি sc ব্যবহার করে পুনরুদ্ধারের বিকল্পগুলি সেট করতে পারেন । নিম্নলিখিত ব্যর্থতার পরে পুনরায় চালু করার জন্য পরিষেবাটি সেট করবে:

sc failure [servicename] reset= 0 actions= restart/60000

এটি সহজে সি # থেকে কল করা যেতে পারে:

static void SetRecoveryOptions(string serviceName)
{
    int exitCode;
    using (var process = new Process())
    {
        var startInfo = process.StartInfo;
        startInfo.FileName = "sc";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        // tell Windows that the service should restart if it fails
        startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/60000", serviceName);

        process.Start();
        process.WaitForExit();

        exitCode = process.ExitCode;
    }

    if (exitCode != 0)
        throw new InvalidOperationException();
}

4
নোট করুন যে আপনাকে পরিষেবার নামটি উদ্ধৃতি চিহ্নগুলিতে অন্তর্ভুক্ত করতে হবে, যদি এতে স্পেস থাকে।
ব্যবহারকারী 626528

20
আপনি যদি সি # তে ইনস্টলার [] পরিষেবা ইনস্টল হ্যান্ডলার থেকে এই কল করতে চলেছেন, যখন পরিষেবাটি ইনস্টল হবে, আপনি এই কলটি "প্রতিশ্রুতিবদ্ধ" ইভেন্ট হ্যান্ডলারের মধ্যে সন্নিবেশ করতে পারেন যা পরিষেবা কন্ট্রোল ম্যানেজারে পরিষেবাটি উপস্থিত হওয়ার ঠিক পরেই এটি কার্যকর করা হবে। এটিকে "আফটার ইনস্টল" ইভেন্ট ম্যানেজারের মধ্যে রাখবেন না, কারণ এটি বাক্সে পরিষেবাটি ইনস্টল হওয়ার প্রথম বার কাজ করবে না।
কনটাঙ্গো

@ কেভিন ভিজ্যুয়াল স্টুডিওর কোড বিশ্লেষণ থেকে বোঝা যায় যে একাধিকবার অবজেক্টগুলি নিষ্পত্তি করা উচিত নয়, process.Close()লাইনটি অকেজো।
জনটব

4
@ জনউটিউব - প্রক্রিয়াটি সরিয়ে দিয়েছেন। বন্ধ করুন () লাইন
কেভিন

24
নোট করুন যে বাক্য গঠনটি কারও কাছে অদ্ভুত লাগতে পারে তবে reset= 0এটি সঠিক এবং reset=0সঠিক। স্পেসগুলির সঠিক ব্যবহার গুরুত্বপূর্ণ, reset=একটি যুক্তি, তারপরে একটি স্থান, তারপরে 0
লিয়াম

12

অনেক চেষ্টার পরে, আমি এটি sc কমান্ড লাইন অ্যাপ্লিকেশন ব্যবহার করে সমাধান করেছি ।

আমার ইনস্টলটুল এবং এসসি সহ ব্যাচ ফাইল রয়েছে। আমার ব্যাচের ফাইলটি এর মতো:

installutil.exe "path to your service.exe"
sc failure "your service name" reset= 300 command= "some exe file to execute" actions= restart/20000/run/1000/reboot/1000

আপনি যদি sc কমান্ডের সম্পূর্ণ ডকুমেন্টেশন চান, তবে এই লিঙ্কটি অনুসরণ করুন: এস.সি.এক্স: পরিষেবা কন্ট্রোলার এবং ইনস্টলড পরিষেবাদির সাথে যোগাযোগ করে

দ্রষ্টব্য: আপনাকে প্রতিটি সমান (=) চিহ্নের পরে একটি স্থান যুক্ত করতে হবে। উদাহরণ: রিসেট = 300


9

2

আমি নীচের প্রকল্পটি পেয়েছি যা কেবলমাত্র কোড এবং উইন এপিআই কলগুলি ব্যবহার করে এই সেটিংসটির যত্ন করে:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac



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