installutil.exeயை வைத்துக்கொண்டு விண்டோஸ் சர்வீசை நிறுவுவதும் நீக்குவதும் மிகவும் சுலபம். ஆனால் ஒரு பொதியாக (package) மாற்றியபின் விண்டோஸ் சர்வீசை நிறுவியதும் கணிணியுடன் அப்படியே ஈஷிக்கொண்டு நிற்கும். பொதியை நீக்கினாலும் சர்வீஸ் பட்டியலில் இருந்து விண்டோஸ் சர்வீஸ் நீங்காது. இதனால் என்ன ப்ரச்சனை என்றால் மீண்டும் அதே பொதியை நிறுவமுடியாது. ஏற்கனவே இந்த பெயரில் ஒரு விண்டோஸ் சர்வீஸ் பட்டியலில் இருப்பதால், மீண்டும் நிறுவ முடியாது... installutil வைத்துக்கொண்டு கூட.
இப்படி பட்டியலில் தங்கிவிட்ட விண்டோஸ் சர்வீசின் பெயரை, சர்வீஸ் முகமையில் (Services console) இருந்தே வலதுபக்க க்ளிக் பண்ணி எல்லாம் நீக்க முடியாது. அஞ்சா நெஞ்சராக இருப்பவர்கள் ரெஜிஸ்ட்ரியில் கைவைத்து இதை நீக்கலாம்.
வேறு எப்படியாவது ஒரு வழியில் இந்த பெயரை நீக்கினால்தான் மீண்டும் விண்டோஸ் சர்வீசை நிறுவமுடியும். விண்டோஸ் மேனேஜ்மெண்ட் இன்ஸ்ட்ருமெண்டேஷன் (WMI) வழியாக இதை நீக்கலாம்.
WMI என்பது விண்டோஸ் கணிணியில் இருக்கும் சர்வீஸ், ப்ராசஸ், பிணைய பகிர்வுகள் (network share) போன்றவைகளைக் கையாளுவதற்கான ஒரு இயங்குதள முகமை. SQL query போன்ற ஒரு மொழியினூடாக கணிப்பொறியில் இயங்கிக்கொண்டிருக்கும் இயங்குதளம், வன்பொருள் மற்றும் மென்பொருட்களைப் பற்றிய தகவல்களைப் நிர்வகிக்கலாம். மேற்கண்ட இரண்டு வரிகளையும் படித்து, ஒன்றும் புரியாமல் தலை கிர்ரென்று சுற்றினால் WMI பற்றி விவரமாக அறிய விக்கிபீடியாவிலோ மைக்ரோசாஃப்ட் தளத்திலோ பார்க்கவும்.
டாட்நெட்டில் WMIயுடன் தொடர்புகொள்ள System.Management namespace இதற்காகவே இருக்கிறது. இதைப் பயன்படுத்த, முதலில் System.Management.dllஐ Referencesல் சேர்த்துக்கொள்ளவேண்டும்.
ManagementObjectSearcher என்ற க்ளாசிசை wql queryயுடன் instantitate செய்து, நமக்கு வேண்டிய சர்வீசின் ரெஃபரென்சை ManagementObject ஆப்ஜக்டில் பெற்றுக்கொள்ளலாம். பிறகு இந்த ManagementObject ஆப்ஜக்டின் Delete மெத்தடின் உதவியுடன் இந்த விண்டோஸ் சர்வீசின் பெயரை சர்வீசஸ் பட்டியலில் இருந்து நீக்க விடமுடியும்.
மாதிரி நிரல்துண்டு:
string
strServiceName
=
"MyService"
;
System.Management.ManagementObjectSearcher services
= new
System.Management.ManagementObjectSearcher(
"select * from Win32_Service where Name='"
+ strServiceName +
"'"
)
;
foreach
(System.Management.ManagementObject obj
in
services.Get())
{
obj.Delete()
;
}
அதாவது, MyService என்ற விண்டோஸ் சர்வீசை இந்த நிரல்வரிகளைக்கொண்டு சர்வீஸ் பட்டியலில் இருந்து அழித்துவிடலாம்.
select * from Win32_Service என்னும் wql query, கணினியில் இருக்கும் அனைத்து விண்டோஸ் சர்வீஸ்கள் பற்றிய விவரத்தையும் பெறுவதற்கு உபயோகிக்கவேண்டும். இதே போல், விண்டோஸ் ப்ராஸஸ் பற்றிய விவரம் வேண்டுமென்றால், select * from Win32_Process என்ற வினவலைப் பயன்படுத்தலாம். ஓடிக்கொண்டிருக்கும் அனைத்து பயன்பாடு/ப்ராஸஸ் பற்றிய விவரமும் இந்த queryயின் வழியாகப் பெறலாம். கணிப்பொறியில் எந்தெந்த அடைவுகள் (டைரக்டரி) பகிர்ந்து கொள்ளப்பட்டிருக்கிறது என்று அறியவேண்டுமா? select * from Win32_Share என்ற query இதற்குப் பயன்படும். foreach லூப்பினுள் obj["Name"].ToString() பயன்படுத்தி பெயர்களை மட்டும் அறியலாம்.
நம் பணியைச் சுலபமாக்குவதற்கு இன்னும் பல Win32_xxx (service, printer, etc.) க்ளாஸ் லிஸ்ட்கள் இருக்கின்றன. முழு Win32 க்ளாஸ் லிஸ்ட் பட்டியலுக்கும் http://www.it-visions.de/Scripting/WMIReferenz.asp?C_Klassentypen=1 சென்று பார்க்கவும்.