You might also want to check whether WMI has already been installed. You should reboot after WMI installation.
code:
;-------------------------------------
; subroutine to check whether WMI 1.5 has been installed on Windows 9x and NT computers
;
; uses CompareVersions(), ActiveService(), ServiceMode()
;-------------------------------------
:CHECKWMI
; Windows 2000 = 1.50.1085.29
; Windows NT 4.0 = 1.50.1085.0001
; Windows 9x = 1.50.1085.0001
; install DCOM98 on Windows 98 (dcom2w98.dll version 2.10.35.35)
Dim $retcode, $wmifile, $wmiversion, $requiredwmiversion, $shellcommand
Dim $dcomfile, $dcomversion, $requireddcomversion
if @INWIN=2
$wmifile='%WINDIR%\system\wbem\winmgmt.exe'
$requiredwmiversion='1.50.1085.0001'
else
$wmifile='%WINDIR%\system32\wbem\winmgmt.exe'
$requiredwmiversion='1.50.1085.29'
endif
$wmiversion=getfileversion($wmifile,'FileVersion')
if compareversions($requiredwmiversion, $wmiversion)=1
? 'Checking for correct version of WMI 1.5'
? 'Updating WMI to current version '+$requiredwmiversion
shell 'wmicore.exe /s'
shell $wmifile+' /regserver'
$REBOOTREQUIRED=1
else
? 'WMI '+$requiredwmiversion+' is installed'
endif
if @INWIN=2
$requireddcomversion='4.71.0.3328'
$dcomversion=readvalue('HKEY_CLASSES_ROOT\CLSID\{bdc67890-4fc0-11d0-a805-00aa006d2ea4}\InstalledVersion','')
if compareversions($requireddcomversion, $dcomversion)=1
? 'Updating DCOM to current version '+$requireddcomversion
shell 'dcom98.exe /q'
$REBOOTREQUIRED=1
else
? 'DCOM 4.71.0.3328 is installed'
endif
$requireddcomversion='5.00.1603.1'
$dcomfile='%WINDIR%\SYSTEM\DCOMCNFG.EXE'
$dcomversion=getfileversion($dcomfile,'FileVersion')
if compareversions($requireddcomversion, $dcomversion)=1
? 'Updating DCOM Configurator to current version '+$requireddcomversion
shell 'dcm95cfg.exe /q'
$REBOOTREQUIRED=1
else
? 'DCOM Configurator 5.00.1603.1 is installed'
endif
endif
if @INWIN=1
if not activeservice('winmgmt')
if servicemode('winmgmt')<>'Automatic'
? 'Setting WMI service to start automatically'
$retcode=servicemode('winmgmt','automatic')
endif
? 'Starting WMI service'
shell 'winmgmt /regserver'
shell 'net start winmgmt'
endif
else
$regkey='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices'
$regentry='MicrosoftWBEMCIM'
$regvalue='%WINDIR%\system32\wbem\winmgmt.exe'
$retcode=writevalue($regkey,$regentry,$regvalue,'REG_SZ')
endif
return