Hallo, für ein grosseres Projekt muss ich mit AutoIt prüfen ob bestimmte Software installiert ist auf der Computer (mit WindowsXP oder Windows7) wo das Skript gerade lauft.
Jetzt meine Frage: Wie ist die allgemeine vorgehensweise um zu uberprüfen ob ein Programm installiert ist? Sieht mann das im Register irgendwo oder kann mann besser WMI benutzen (aber wie?).
Ist Programm 'X' installiert ?
-
- [ gelöst ]
-
Katrijn -
14. Oktober 2010 um 18:49 -
Geschlossen -
Erledigt
-
-
du schaust dir in der registry an wo diese Software die werte speichert und mit regread überprüfst du ob das programm auf diesem Rechner befindet
-
Hier steht wie mann das mit Windows 2000 macht, dies ist schon ziemlich alt, kann jemand das für mich in AutoIt für WinXP und Win7 übersetzen? Siehe: http://technet.microsoft.com/en-us/library/ee156540.aspx
-
__Registry__
-
Ich würde es über die WMI machen, denn bei der Registry gibt es einen Nachteil (außer jemand weiß wie ich im x86 mode x64 Schlüssel auslese)
Spoiler anzeigen
[autoit]#RequireAdmin
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Local Const $sPathini = @ScriptDir & '\' & @ComputerName & '3.ini'
_Programsread("x86")
If @OSArch = "x64" Then _Programsread("x64")Func _Programsread($sOsArch)
[/autoit]
If $sOsArch = "x86" Then $sRegkey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
If $sOsArch = "x64" Then $sRegkey = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
$i = 0
While 1
$i +=1
$sReturnkeyname = RegEnumKey($sRegkey, $i)
If @error Then ExitLoop
$sReturnDisplayVersion = RegRead($sRegkey & $sReturnkeyname, "DisplayVersion")
$sReturnDisplayName = RegRead($sRegkey & $sReturnkeyname, "DisplayName")
If Not StringInStr($sReturnDisplayName,'(KB') <> 0 Then
IniWrite($sPathini,'Version',$sReturnDisplayName,$sReturnDisplayVersion)
EndIf
WEnd
EndFuncIm x64 Mode bekommst du nicht alle Programme. Führst du das Programm im x64 Mode aus klappt es nicht mehr unter x86
Du könntest es höchstens 2 mal compilieren (einmal x86 einmal x64) und dann ein 3. Script je nach OS Architektur das jeweilige Script ausführen lassen -
Hi!
Einfach in beiden Uninstall zweige schauen!
Hir ist der für x64 = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\UninstallLg Kleienr
-
hey sowas könnte ich auch gebrauchen
Kann man das so machen das der mit einem Haken anzeigt ist installiert wenn nicht ein x drin steht ? -
Hi!
Einfach in beiden Uninstall zweige schauen!
Hir ist der für x64 = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\UninstallLg Kleienr
Du musst bedenken das bei x64 OS, x86 Programme unter "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
und x64 Programme unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" geschrieben werden -
Aus der Hilfe zu RegRead:
ZitatFalls bei einem 64-Bit Windows auf die speziellen Einträge des 64-Bit Systems zugegriffen werden soll, muss dem Begriff HK... das Suffix 64 angehängt werden (z. B. HKLM64).
-
Hi!
Mahagon
Richtig !
Hatte garnicht in dein Spoiler geschaut, da steht mein Kommentar schon von dir mit Funktion!Lg kleiner
-
Vielen dank an alle! Mit WMI funktionierts bestens.