How do I uninstall software?
If the software was installed using Microsoft Windows Installer (MSI), use the WMI class Win32_Product and the Uninstall method.
const wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\cimv2', '', ''); FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Product Where Name="Software Name"','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; if oEnum.Next(1, FWbemObject, iValue) = 0 then begin Writeln(Format('Result %d',[Integer(FWbemObject.Uninstall())]));//if the returned value is 0 the uninstallation was Successful. FWbemObject:=Unassigned; end; end;
How do I determine what version of Microsoft Office is installed?
Use the Win32_Product class and check the value of the Version property.
Note : The execution of this class can take time to run, depending of how many software entries exist.
const wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\cimv2', '', ''); FWbemObjectSet:= FWMIService.ExecQuery('SELECT Name,Version FROM Win32_Product Where Name LIKE "Microsoft Office%"','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin Writeln(Format('Name %s',[String(FWbemObject.Name)]));// String Writeln(Format('Version %s',[String(FWbemObject.Version)]));// String Writeln(''); FWbemObject:=Unassigned; end; end;
How I do inventory all the software installed on a computer?
If the software was installed using Microsoft Windows Installer (MSI) use the WMI class Win32_Product.
Note : The execution of this class can take time to run, depending of how many software entries exist.
const wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\cimv2', '', ''); FWbemObjectSet:= FWMIService.ExecQuery('SELECT Name,Version FROM Win32_Product','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin Writeln(Format('Name %s',[String(FWbemObject.Name)]));// String Writeln(Format('Version %s',[String(FWbemObject.Version)]));// String Writeln(''); FWbemObject:=Unassigned; end; end;
This post is based in the MSDN entry WMI Tasks: Computer Software
October 22, 2011 at 5:10 pm
Thanks… I get correct results now… Great Blog!!!!!!!!!!
October 22, 2011 at 5:12 pm
whoops… wrong post
Pingback: Delphi Liste der Exe-Pfade aller installierten Programme - Delphi-PRAXiS