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