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\Uninstall
Lg 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\Uninstall
Lg 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.
