Deinstallation von evtl. zwei Programmen ?

  • Hallo Leute,

    mit diesen Codeabschnitt bekomme ich MsgBox, falls das Programm bereits installiert ist, um zu entscheiden, ob dieser deinstalliert werden soll und danach neu installiert (neue Version) werden.

    [autoit]

    ;~ Schritt 1: Prüfen, ob der angemeldete User Admin auf dem Rechner ist. Wenn ja, dann Sprung zum Schritt 2.
    ;~ Wenn nicht die MsgBox ausgeben: Sie müssen Administrator sein um dieses Programm fortzusetzen!. Dann der Abbruch der Installation.
    If Not IsAdmin() Then Exit MsgBox(64, "Kein Recht!", "Sie müssen Administrator sein um dieses Programm fortzusetzen!")
    ;~ Schritt 2: Wenn der User Admin Rechte hat, prüfen ob ob der Zeichencode von MicroStation V8i in Registry vorhanden ist
    Local $RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{57F5CC1D-2E00-4008-8CEC-EFE61B2E58AE}"
    Local $IsInstalled = RegRead($RegKey, "DisplayName")
    ;~ a) Wenn dieses Zeichencode in der Registry nicht vorhanden ist, dann die Installation des Programms starten.
    If $IsInstalled = "" Then
    Installieren()
    ;~ b) Wenn der Zeichencode in der Registry vorhanden ist, dann die MsgBox ausgeben: Das Programm ist bereits installiert. Soll es neuinsalliert werden? JA / NEIN
    Else
    If MsgBox(36, "Neuinstallation?", "Das Programm ist bereits installiert. Soll es neuinsalliert werden?") = 6 Then
    ;~ Wenn JA, dann diesen UninstallString ausführen.
    RunWait('msiexec /x {57F5CC1D-2E00-4008-8CEC-EFE61B2E58AE} /qn /norestart')
    DirRemove(@ProgramFilesDir & $InstallDir , 1)
    ;~ Und nach der Deinstallation, die Installation des Programms starten.
    Installieren()
    Else
    ;~ Wenn NEIN, dann die MsgBox ausgeben: "Abbruch der Installation"
    MsgBox(64, "Abbruch!", "Abbruch der Installation")
    EndIf
    EndIf

    [/autoit]

    Das funktioniert prima.

    Jetzt habe ich einige Computer, wo evtl. noch eine vorherige Version installiert ist.
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9098507F-E0EA-4904-9C56-14DCD222C15D}"

    Was muss ich im Code ändern, damit die beiden Versionen geprüft werden, ob diese installiert sind. Beide sollen deinstalliert werden, bevor die Funktion "Installieren" gestartet wird.

    Ich habe es so probiert, leider ohne Erfolg:

    Spoiler anzeigen
    [autoit]

    ;~ Schritt 1: Prüfen, ob der angemeldete User Admin auf dem Rechner ist. Wenn ja, dann Sprung zum Schritt 2.
    ;~ Wenn nicht die MsgBox ausgeben: Sie müssen Administrator sein um dieses Programm fortzusetzen!. Dann der Abbruch der Installation.
    If Not IsAdmin() Then Exit MsgBox(64, "Kein Recht!", "Sie müssen Administrator sein um dieses Programm fortzusetzen!")
    ;~ Schritt 2: Wenn der User Admin Rechte hat, prüfen ob ob der Zeichencode von MicroStation V8i in Registry vorhanden ist
    Local $RegKey1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{57F5CC1D-2E00-4008-8CEC-EFE61B2E58AE}"
    Local $RegKey2 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9098507F-E0EA-4904-9C56-14DCD222C15D}"
    Local $IsInstalled1 = RegRead($RegKey1, "DisplayName")
    Local $IsInstalled2 = RegRead($RegKey2, "DisplayName")
    ;~ a) Wenn dieses Zeichencode in der Registry nicht vorhanden ist, dann die Installation des Programms starten.
    If $IsInstalled1 = "" or $IsInstalled2 = "" Then
    Installieren()
    ;~ b) Wenn der Zeichencode in der Registry vorhanden ist, dann die MsgBox ausgeben: Das Programm ist bereits installiert. Soll es neuinsalliert werden? JA / NEIN
    Else
    If MsgBox(36, "Neuinstallation?", "Das Programm ist bereits installiert. Soll es neuinsalliert werden?") = 6 Then
    ;~ Wenn JA, dann diesen UninstallString ausführen.
    RunWait('msiexec /x {57F5CC1D-2E00-4008-8CEC-EFE61B2E58AE} /qn /norestart')
    RunWait('msiexec /x {9098507F-E0EA-4904-9C56-14DCD222C15D} /qn /norestart')
    DirRemove(@ProgramFilesDir & $InstallDir , 1)
    ;~ Und nach der Deinstallation, die Installation des Programms starten.
    Installieren()
    Else
    ;~ Wenn NEIN, dann die MsgBox ausgeben: "Abbruch der Installation"
    MsgBox(64, "Abbruch!", "Abbruch der Installation")
    EndIf
    EndIf

    [/autoit]


    Besten Dank im Voraus!

    Viele Grüße,
    Dino

  • du müsstest in der Zeile 10 das OR durch ein AND ersetzen.

    Du willst ja das beide nicht vorhanden sind... so wie du es im moment hast, müsste nur eins von beiden nicht vorhanden sein um die Installation durchzuführen.

    [autoit]


    If $IsInstalled1 = "" AND $IsInstalled2 = "" Then

    [/autoit]

    greetz Blade

    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.