Seite 1 von 1

installierte programme (per windows installer) listen ...

Verfasst: 17.10.2005 17:16
von bingo

Code: Alles auswählen

;INSTALLPROPERTY_PACKAGENAME          = "PackageName"; 
;INSTALLPROPERTY_TRANSFORMS           = "Transforms"; 
;INSTALLPROPERTY_LANGUAGE             = "Language"; 
;INSTALLPROPERTY_PRODUCTNAME          = "ProductName"; 
;INSTALLPROPERTY_ASSIGNMENTTYPE       = "AssignmentType"; 
;INSTALLPROPERTY_PACKAGECODE          = "PackageCode"; 
;INSTALLPROPERTY_VERSION              = "Version"; 
;INSTALLPROPERTY_PRODUCTICON          = "ProductIcon"; 
;INSTALLPROPERTY_INSTALLEDPRODUCTNAME = "InstalledProductName"; 
;INSTALLPROPERTY_VERSIONSTRING        = "VersionString"; 
;INSTALLPROPERTY_HELPLINK             = "HelpLink"; 
;INSTALLPROPERTY_HELPTELEPHONE        = "HelpTelephone"; 
;INSTALLPROPERTY_INSTALLLOCATION      = "InstallLocation"; 
;INSTALLPROPERTY_INSTALLSOURCE        = "InstallSource"; 
;INSTALLPROPERTY_INSTALLDATE          = "InstallDate"; 
;INSTALLPROPERTY_PUBLISHER            = "Publisher"; 
;INSTALLPROPERTY_LOCALPACKAGE         = "LocalPackage"; 
;INSTALLPROPERTY_URLINFOABOUT         = "URLInfoAbout"; 
;INSTALLPROPERTY_URLUPDATEINFO        = "URLUpdateInfo"; 
;INSTALLPROPERTY_VERSIONMINOR         = "VersionMinor"; 
;INSTALLPROPERTY_VERSIONMAJOR         = "VersionMajor"; 


buffer_guid = AllocateMemory(39) 
buffer_name_len = 500 
buffer_name = AllocateMemory(buffer_name_len) 
i.l 

While MsiEnumProducts_(i,buffer_guid) <> #ERROR_NO_MORE_ITEMS 
i+1 
;Debug PeekS(buffer_guid) ;all products-guid 

If MsiGetProductInfo_(PeekS(buffer_guid),"InstalledProductName",buffer_name,@tmp_buffer_name_len) = 0 
;Debug tmp_buffer_name_len 
Debug PeekS(buffer_name) 
tmp_buffer_name_len = buffer_name_len 
EndIf 

If MsiGetProductInfo_(PeekS(buffer_guid),"InstallSource",buffer_name,@tmp_buffer_name_len) = 0 
;Debug tmp_buffer_name_len 
Debug PeekS(buffer_name) 
tmp_buffer_name_len = buffer_name_len 
EndIf 

If MsiGetProductInfo_(PeekS(buffer_guid),"PackageName",buffer_name,@tmp_buffer_name_len) = 0 
;Debug tmp_buffer_name_len 
Debug PeekS(buffer_name) 
tmp_buffer_name_len = buffer_name_len 
EndIf 

Wend 

FreeMemory(buffer_guid) 
FreeMemory(buffer_name)
mit dieser routine können alle installierten programme , die per microsoft windows installer installiert wurden , aufgelistet werden . weitere eigenschaften usw. lassen sich ebenfalls realtiv einfach auslesen .

eine alternative wäre , direkt die registry auszulesen (teilweise umständlich ...) oder per wmi (langsamer...) auf die daten zuzugreifen .

da immer mehr packete als xyz.msi zum installieren angeboten werden , wird dieser weg zunehmend interessant :allright:

Verfasst: 17.10.2005 17:58
von MVXA
*.msi
Finde ich grässlich. Der Assistent ist sehr nervig und das Format ist nicht
kompatibel mit älteren Systemen wie Win98.

Verfasst: 17.10.2005 18:08
von hardfalcon
Doch, isses. Aber man muss halt den windows Installer 2.0 installieren, bevor man die eigentliche Software installieren kann... :freak:

Verfasst: 18.10.2005 16:25
von AND51
Mit diesem magischen

Code: Alles auswählen

RunProgram("RunDll32.exe",  "Shell32.dll,Control_RunDLL Appwiz.cpl,,0","")
kann man alle Programme anzeigen lassen, und nicht nur die, die mit nem MSI Installer installiert wurden.

Unter WinXP erfolgreich getestet. Wenns nicht geht, mal die letzte Zahl im Code in eine 1 ändern ( 0 => 1).

Verfasst: 18.10.2005 16:36
von Kiffi
> [...] kann man alle Programme anzeigen lassen, und nicht nur die,
> die mit nem MSI Installer installiert wurden.

und mit dem SIS (ShowInstalledSoftware) geht die Anzeige auch noch 'nen
Tick schneller. ;-)

Grüße ... Kiffi

Verfasst: 19.10.2005 08:04
von PAMKKKKK
@Kiffi

Deine HP finde ich :allright: :allright: :allright:

Verfasst: 19.10.2005 09:00
von Kiffi
> Deine HP finde ich :allright:

ist mit UDO erstellt 8)

Danke für's Lob & Grüße ... Kiffi