Windows - Windows XP és .NET szerverek aktiválása programból

forráskód letöltése
A szoftverkalózkodás visszaszorítása okán vezette be a Microsoft a termékaktiválást. Legális birtoklás mellett nem kell félni attól a 30-60 másodperces procedúrától amivel jár. Sokgépes hálózatokban viszont rengeteg időt lehet nyerni, ha valamilyen szinten tudjuk automatizálni a folyamatot. Az alábbiakban bemutatjuk, hogy lehet szkriptekből és programokból hálózaton keresztül aktiválni a gépeket, gyorsabban, mint a varázslóval.
Cikkünkhöz mellékeltünk két VB szkriptet: az "Offline.vbs"-ben le kell cserélni a "1234-5678" számot a Microsoft-tól kapott termékazonosító kóddal és futtatásával Internet kapcsolat nélkül is elvégezhető az aktiválás. Az "Online.vbs" szkriptet élő Internet kapcsolat mellett kell futtatni és néhány másodperc alatt elvégzi az operációs rendszer aktiválását, termékkód nélkül is. Mindkettőre érvényes, hogy alapértelmezésben a helyi gépet aktiválják, de ha az első sorban található "Computer" változóba beírjuk egy távoli gép nevét, akkor azon hajtódik végre a szkript.
Az alábbiak végrehajthatók Windows XP Home és Professional, illetve a .NET szerverek leendő verzióin is.
Az aktiválás elkerülése
Ne gondoljon senki az XP feltörésére vagy valamiféle trükkre, teljesen legális dologról van szó. Létezik vállalatok számára készült, speciális licence-el ellátott, úgynevezett "Corporate" verzió, melyből teljesen kihagyták az aktiválást. Az operációs rendszert csupán fel kell telepíteni és használatba venni, ahogy megszoktuk a Windows 2000-nél vagy a korábbi verzióknál. Ezen verzió licence feltételeiről a Microsoft weblapján vagy ügyfélszolgálatánál lehet részleteket megtudni.
Támogatás a programozók számára
Windows XP-ben illetve a .NET szerverekben található meg a "Win32_WindowsProductActivation" osztály, mely néhány tulajdonságon és metóduson keresztül lehetővé teszi az aktiválás bizonyos részeinek elérését. Az osztály használatára már mutattunk be példákat egy korábbi cikkünkben (lásd a kapcsolódó témaköröket). Most két metódust fogunk alkalmazni, két alapvetően különböző, de azonos eredményre vezető eljárást futtat.
Offline aktiválás
Az offline aktiválás elsősorban Internet kapcsolattal vagy modemmel nem rendelkező felhasználók számára készült. Fel kell hívni a Microsoft ügyfélszolgálatát vagy faxon elküldeni a termék kódját, majd a válaszban visszakapjuk a beírandó azonosítót (ConfirmationID). Ez a leglassúbb, legidőigényesebb változat. Tekintve a mai modemek árát, javasoljuk inkább a másik módszer használatát. Ha valaki mégis emellett dönt és tömegesen, több gépen kell alkalmaznia, tekintse meg az alábbi Visual Basic szkriptet.
Offline aktiválás szkriptből vagy programból való végrehajtása során meg kell hívni a WMI (Windows Management Instrumentation) szolgáltatás fent említett "Win32_WindowsProductActivation" osztályának "ActivateOffline" metódusát. Paraméterként a Microsoft-tól kapott azonosítót kell átadni.
Tároljuk el egy változóba az aktiválandó számítógép nevét vagy IP címét. Ha pontot (".") írunk be a helyi gépet fogja aktiválni.
Computer = "."
Ezután a név felhasználásával kapcsolódjunk a WMI alapértelmezett névteréhez (\root\cimv2), itt található a "Win32_WindowsProductActivation" osztály. Feltétel, hogy a távoli gépen is érvényes legyen az aktuális felhasználói nevünk és jelszavunk.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")
Egy egyszerű WQL (WMI Query Language) lekérdezéssel hozzájuthatunk az osztály példányaihoz (ami tulajdonképpen egy példányt jelent).
Set colWindowsProducts = objWMIService.ExecQuery("SELECT * FROM Win32_WindowsProductActivation")
Ezután egy FOR ciklussal tesszük kezelhetővé a kapott objektumpéldányokat és utolsóként meghívjuk az "ActivateOffline" metódust. Paraméterként adjuk át a Microsoft-tól kapott termékkódot.
For Each WindowsProduct In colWindowsProducts
    WindowsProduct.ActivateOffline("1234-5678")
Next
Online aktiválás
Az aktiválás egyik legésszerűbb módja, ha belső vagy bekapcsolt külső modem mellett végezzük a telepítést. Ha a hardverfelismerési fázisban a Windows nem csak felismeri, hanem rendelkezik is meghajtóval a modemhez, akkor a telepítés utolsó momentumainak egyike az aktiválás. Magyar operációs rendszer esetén egy 06 08-as kezdetű ingyenesen hívható zöld számot fog tárcsázni, így nem kerül egy fillérbe sem. Kicsit más a helyzet egy állandó kapcsolattal működő hálózaton, ahol nem lehet a telepítési fázisban megadni minden beállítást, ami az Internet eléréséhez szükséges. Ilyenkor indítsuk el az operációs rendszert állítsuk be az Internet elérést és aktiváljunk a következő szkript futtatásával:
A szkript majdnem teljes egészében megegyezik az előbbivel. Különbség csupán a meghívandó metódusban van. Ezúttal ugyanis az "ActivateOnline"-ra van szükségünk. Paraméterekkel nem rendelkezik, azonosítót sem kell beírni (nincs is).
Computer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")
Set colWindowsProducts = objWMIService.ExecQuery ("SELECT * FROM Win32_WindowsProductActivation")
For Each WindowsProduct In colWindowsProducts
    WindowsProduct.ActivateOnline()
Next
A szkript a hálózat terheltségétől függően néhány másodperc alatt elvégzi az aktiválást és utána kilép. Ha bármilyen probléma lépne fel közben a WMI azonnal generál egy hibaüzenetet, ami megjelenik a képernyőn, ezért nem kezeltük le a metódus visszatérési értékét. Ami sikeres végrehajtás esetén 0 (nulla), egyébként nullától eltérő érték. Ez érvényes az offline és online metódusokra is.