দেখে মনে হয় উইন্ডোজ সংস্করণগুলিতে উইন্ডোজ 7 এর পরে (যাচাই করা হয়নি, তবে উইন্ডোজ সার্ভার 2012 আর 2 এর সাথে সর্বশেষ অভিজ্ঞতার সাথে), সার্ভিস কন্ট্রোল ম্যানেজার (এসসিএম) আরও কঠোর।
উইন্ডোজ on-তে এটি কেবল অন্য প্রক্রিয়া তৈরি করেছে, এটি এখন সার্ভিস প্রক্রিয়াটি প্রায় রয়েছে কিনা তা পরীক্ষা করে দেখছে এবং পরিষেবাটি বন্ধ থাকা অবস্থায় দেখা গেলেও ক্রিয়েটস সার্ভিস / ডিলিট সার্ভিসে পরবর্তী কোনও কলের জন্য ERROR_SERVICE_MARKED_FOR_DELETE (1072) ফিরে আসতে পারে।
আমি এখানে উইন্ডোজ এপিআই কোড বলছি, তবে আমি কী ঘটছে তা স্পষ্টভাবে রূপরেখা দিতে চাই, সুতরাং এই ক্রমটি উল্লিখিত ত্রুটির কারণ হতে পারে:
SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);
SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);
SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state
DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;
// any further calls to CreateService/DeleteService will fail
// if service process is still around
কোনও পরিষেবা প্রক্রিয়া ইতিমধ্যে তার SERVICE_STOPPED রাজ্যের রিপোর্ট করার পরেও এখনও অবাক হওয়ার কারণ নেই। এটি একটি নিয়মিত প্রক্রিয়া, যার মূল থ্রেড StartServiceCtrlDispatcherএপিআই- এর কাছে কল করার জন্য 'আটকে' থাকে , তাই এটি প্রথমে একটি স্টপ কন্ট্রোল ক্রিয়ায় প্রতিক্রিয়া জানায় তবে তার অবশিষ্ট কোড সিক্যুয়েন্সটি কার্যকর করতে হয়।
এটি দুর্ভাগ্যজনক এক ধরণের এসসিএম / ওএস আমাদের জন্য এটি সঠিকভাবে পরিচালনা করছে না। একটি প্রোগ্রামেটিক সমাধান খুব সহজ এবং নির্ভুল: পরিষেবাটি বন্ধ করার আগে পরিষেবা এক্সিকিউটেবলের প্রক্রিয়া হ্যান্ডেলটি পান, তারপরে এই হ্যান্ডেলটি সিগন্যাল হওয়ার জন্য অপেক্ষা করুন।
যদি কোনও সিস্টেম প্রশাসনের দৃষ্টিকোণ থেকে সমস্যাটি পৌঁছায় তবে সমাধানটি পরিষেবা প্রক্রিয়াটি পুরোপুরি অদৃশ্য হওয়ার অপেক্ষার জন্য রয়েছে।