Deinstallationsroutine in Script integrieren

  • Hey Leute,

    nachdem meine Install Script jetzt alle so funktionieren wie sie sollen, habe ich mir gedacht das es auch sehr nützlich wäre, wenn ich per Script was installieren lasse, das dieses zuerst in der Registry nachsieht ob das Programm bereits installiert ist und bei Bedarf dieses vor der Installation Deinstalliert. Besser noch den User davor frägt, ob er es deinstallieren möchte.

    Folgendes habe ich bereits versucht...klappt aber irgendwie alles nicht so wie es soll...

    Spoiler anzeigen
    [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    If FileExists($pfad) = $pfad Then _GO();=> geht auch nicht mit True

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists($pfad) = False Then
    MsgBox(0,"","Ashampoo Burning Studio 7 ist nicht installiert!")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _GO()
    Run($pfad)
    EndFunc

    [/autoit]

    Hoffe Ihr könnt mir helfen...bin doch noch so ein Anfänger x)

    Mfg
    Apollo 13

  • also als erstes könntest du uns ja mal dne wert von deinen schlüssel in der reg sagen. ist das ein pfad oder was?

    dann hast ud noch winexists falsch benutzt es reicht völlig auch das hier zu schreiben: if winexists($pfad) then _go()

    und die zeile darunter könnte man auch so schreiben: if not winexists($pfad) then msgbox(0,"","")

    ;) hoffe mal das dir das ein bisschen geholfen hat^^

  • Jap in dem Reg Key ist der Pfad zu der exe gespeichert, die für die Deinstallation zuständig ist:

    "C:\Programme\Ashampoo\Ashampoo Burning Studio 7\unins000.exe" /SILENT

    Das mit dem winexists werd ich gleich mal ausprobieren...
    Schonmal danke für deine schnelle Antwort

    EDIT:
    Man...irgenwie peil ich des ned...er sagt mir egal wie ichs schreib immer meine Message Box mit Ashampoo Burning Studio ist nicht installiert...

    Spoiler anzeigen
    [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    ;$pfad1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "UninstallString")

    [/autoit] [autoit][/autoit] [autoit]

    If WinExists($pfad) Then _Go()

    [/autoit] [autoit][/autoit] [autoit]

    If not WinExists($pfad) Then
    MsgBox(0,"","Ashampoo Burning Studio 7 ist nicht installiert!")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _Go()

    Run($pfad)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von bugmenot1 (8. Dezember 2007 um 11:33)

  • bin mir nicht ganz sicher ob das so alles is wie du das willst und ob das geht aber kannst es ja mal veruchen ;)

    Spoiler anzeigen
    [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")

    [/autoit] [autoit][/autoit] [autoit]

    If fileexists("unins000.exe") Then
    MsgBox(0,"","Programm ist installiert.")
    Else
    MsgBox(0,"","Programm ist nicht installiert.")
    EndIf

    [/autoit]

    Edit: BugFix : jo, hast recht wa n versehen hab das winexists übersehen. ;)

    @Apollo13: sry, bin grad irgendwie voll verpeilt. ;)

  • BugFix : ich hatte den prozess doch per Run gestartet und erst dann die if anfrage gemacht...ober versteh ich da grad was falsch?

    PS: script hab ich jezt schon geändert aber es sah vorher so aus:

    Spoiler anzeigen
    [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")

    [/autoit] [autoit][/autoit] [autoit]

    Run($pfad) ;hier run zum strten des prozesses

    [/autoit] [autoit][/autoit] [autoit]

    If ProcessExists("unins000.exe") Then ;und hier dann die if anfage
    MsgBox(0,"","Programm ist installiert.")
    Else
    MsgBox(0,"","Programm ist nicht installiert.")
    EndIf

    [/autoit]

    EDIT: ok hast es schon selber gemerkt^^
    es war ja auc nur ein kleines beispiel. er hätte es eben noch ein bisschen umschreiben müssen.

    Konfuzius sagt: "Wer einen Fehler gemacht hat und ihn nicht korrigiert, begeht einen zweiten." ;)

    • Offizieller Beitrag

    Ich würde das so angehen:

    Spoiler anzeigen
    [autoit]


    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    If @error Then
    MsgBox(0,"","Ashampoo Burning Studio 7 ist nicht installiert!")
    Else
    If MsgBox(36, 'Ashampoo Burning Studio 7', 'Programm deinstallieren?') = 6 Then
    RunWait($pfad)
    EndIf
    EndIf
    ;weiter mit der Installation...

    [/autoit]
  • Danke für eure vielen Antworten...ich hab jetzt das was Oscar geschrieben hat mal eingebaut...so ungefähr passt es...
    Klappt alles soweit ganz gut...
    Noch ne Frage dazu...wie kann ich einbauen, dass wenn ich auf Nein klicke bei der Frage ob ich das Programm Deinstallieren möchte das Script dann beendet wird?
    Ich hab was versucht, aber wenn ich dann auf Nein klicke kommt die Message Box erneut...und wenn ich dann nochmals auf Nein klicke, dann hört das Script erst auf.
    Denn es könnte ja sein, dass ich das Programm versuche zu installieren, weil ich nicht mehr wusste das es bereits drauf war...so möchte ich es nicht Neuinstallieren aber auch nicht Deinstallieren.

    Aber trotzdem ein ganz ganz großen THX an alle

    EDIT:
    @.::Mignon::.
    So wie du es lösen würdest habe ich noch nicht ausprobiert....das werde ich natürlich auch noch ausprobieren...jetzt muss ich aber erst mal was essen.

    • Offizieller Beitrag

    Also wenn ich das jetzt richtig verstehe, dann wäre 'Ok' und 'Abbrechen' bei der MsgBox besser.

    Spoiler anzeigen
    [autoit]


    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, 'Ashampoo Burning Studio 7', $msg)
    Case 1; 'Ok'
    RunWait($pfad)
    Exit
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf
    ;weiter mit der Installation...

    [/autoit]

    RegRead gibt einen Fehler aus, wenn der Key nicht existiert.
    Mit 'Ok' würde das Programm deinstalliert werden und das Script beendet sich, bei 'Abbrechen' wird das Script ohne Deinstallation beendet.
    Und wenn ein Fehler aufgetreten ist (Key existiert nicht), dann wird mit der Installation weiter gemacht.

  • So ich hab des jetzt mal so zusammengeschrieben, dass es wie ich meine funktioniert...vielleicht mag es etwas seltsam erscheinen und man könnte es bestimmt auch viel einfacher lösen...aber die Hauptsache ist jetzt mal, dass es wenigstens so geht xD

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.2.8.1
    Author: $cR!pT k!ddY
    AutoIT Forum x)
    Script Function:
    Ashampoo Burning Studio 7.10 installieren + Seriennummer gleich eingeben

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;$cR!pT Start

    [/autoit] [autoit][/autoit] [autoit]

    ;Ashampoo Burning Studio installieren
    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, 'Ashampoo Burning Studio 7', $msg)
    Case 1; 'Ok'
    RunWait($pfad)
    ShellExecute(@Scriptdir & "\Burning Studio 7.exe")
    Exit
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    AutoItSetOption("MouseCoordMode",0)
    BlockInput(1)
    ShellExecute(@Scriptdir & "\Ashampoo Burning Studio 7.10.exe")
    $title="Setup-Sprache auswählen"
    $title1="Setup - Ashampoo Burning Studio 7"
    $title2="Ashampoo Burning Studio 7 - Informationen zur Testperiode"
    $title3="Ashampoo Burning Studio 7 Registrierung"
    $title4="Ashampoo Burning Studio 7"
    $title5="Konfiguration der Nachrichten-Kanäle"
    $title6="Ashampoo Burning Studio 7: Was möchten Sie tun?"
    WinWait($title, "Wählen")
    ControlClick($title, "OK","TButton1")
    WinWait($title1, "Willkommen")
    ControlClick($title1, "&Weiter >","TButton1")
    WinWait($title1, "Lizenzvereinbarung")
    ControlClick($title1, "Ich &akzeptiere die Vereinbarung","TRadioButton1")
    ControlClick($title1, "&Weiter >","TButton2")
    WinWait($title1, "Information")
    ControlClick($title1, "&Weiter >","TButton2")
    WinWait($title1, "Ziel-Ordner wählen")
    ControlClick($title1, "&Weiter >","TButton3")
    WinWait($title1, "Zusätzliche Aufgaben auswählen")
    WinActivate($title1, "Zusätzliche Aufgaben auswählen")
    MouseClick("left",52,146,1)
    WinActivate($title1, "Zusätzliche Aufgaben auswählen")
    MouseClick("left",53,215,1)
    WinActivate($title1, "Zusätzliche Aufgaben auswählen")
    MouseClick("left",55,235,1)
    ControlClick($title1, "&Weiter >","TButton3")
    WinWait($title1, "Installation durchführen")
    ControlClick($title1, "&Weiter >","TButton3")
    WinWait($title1, "Beenden")
    ControlClick($title1, "&Fertigstellen","TButton3")
    WinWait($title2, "Testperiode")
    ControlClick($title2, "Freischaltcode eingeben","Button4")
    ControlClick($title2, "&OK","Button6")
    WinWait($title3, "Bitte geben")
    MouseClick("left",17,91,1)
    Send("-----") ;=>Seriennummer hier eintragen
    ControlClick($title3, "&Registrieren","Button1")
    WinWait($title4, "Der Code wurde akzeptiert")
    ControlClick($title4, "OK","Button1")
    WinWait($title5, "Dieses Programm unterstützt")
    MouseClick("left",27,152,1)
    MouseClick("left",27,172,1)
    ControlClick($title5, "OK","Button1")
    WinWait($title6, "MenuBarParent")
    ControlClick($title6, "&Beenden","Button4")

    [/autoit] [autoit][/autoit] [autoit]

    BlockInput(0)

    [/autoit]
  • Ähhm..

    Spoiler anzeigen
    [autoit]

    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, 'Ashampoo Burning Studio 7', $msg)
    Case 1; 'Ok'
    RunWait($pfad)
    ShellExecute(@Scriptdir & "\Burning Studio 7.exe")
    Exit
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit]


    Da wird im Case 1
    RunWait -> Uninstall ausgeführt
    Shellexecute -> Die Install gestartet
    Exit -> Das Script beendet
    Sollte das nicht so sein:

    Spoiler anzeigen
    [autoit]

    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, 'Ashampoo Burning Studio 7', $msg)
    Case 1; 'Ok'
    RunWait($pfad)
    ;;; Nichts weiter tun, es wird nicht beendet -> Script nach ENDIF fortgesetzt
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit]


    Case 1:
    Uninstall ausführen
    nichts tun, Script weiter laufen lassen. Dan wird das danach ausgeführt:

    Spoiler anzeigen
    [autoit]

    AutoItSetOption("MouseCoordMode",0)
    BlockInput(1)
    ShellExecute(@Scriptdir & "\Ashampoo Burning Studio 7.10.exe")
    $title="Setup-Sprache auswählen"
    ...
    ...

    [/autoit]
  • Aaa...stimmt...was hab ich hier wieder gepostet...wenn man nicht alles kommentiert im Source Code xD

    So hab ichs mir jetzt mal geschrieben:

    Spoiler anzeigen
    [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ashampoo Burning Studio 7_is1", "QuietUninstallString")
    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, 'Ashampoo Burning Studio 7', $msg)
    Case 1; 'Ok'
    RunWait($pfad)
    Exit ;=>Wenn Exit auskommentiert, dann wird die neue Installation automatisch nach der Deinstallation gestartet!
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit]

    Dann passt das Script eigentlich...was mir jetzt noch eingefallen ist...ich könnt doch auch noch eine Message Box einbauen, die nach der obigen Message Box beim Klick auf OK nachfragt, ob ich das Programm nur Deinstallieren möchte, oder Deinstallieren und Neuinstallieren... Also eine Ja und Nein Abfrage...beim Klick auf Nein wird halt nur die Deinstallation ausgeführt, und bei Ja eine anschließende Neuinstallation.
    Wie könnt ich die noch einbauen, da ich mir nicht ganz sicher bin wie ich das genau machen soll...nicht das es wieder durcheinander läuft...ich weis...selber probieren und dann fragen...aber ich hab dafür grad echt kein Kopf mehr :P ... Wenn sich also einer erbarmen würde mir das noch zu schreiben, wär ich sehr dankbar :D

    Ich kanns nur noch mal sagen...DANKE Ihr habt mir echt sehr geholfen...

    Mfg
    Apollo 13

  • Dazu einfach den Case 1 so schreiben:

    [autoit]

    If MsgBox(36,"Titel","Nach deinstallation installieren?")) = 6 Then
    RunWait("UNINSTALL")
    ; Weiter zur Installatzionspringen
    Else
    RunWait("UNINSTALL")
    Exit
    EndIf

    [/autoit]
  • Ach man...jetzt hab ich schon wieder ein Problem wegen dem Deinstallieren...es gibt ja nicht immer Silent Switches für die Deinstallation...vlt war Ashampoo Burning Studio 7 doch ein schlechtes Beispiel...denn wenn ich das ganze jetzt nämlich bei 7-Zip versuche, dann geht es nicht...das Script wird entweder einfach nach den Message Boxen beendet, oder geht danach nicht mehr weiter...wie soll ich das blos schreiben jetzt...
    Ich werd schon ganz blöd vor lauter Fehlermeldungen...

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.2.8.1
    Author: $cR!pT k!ddY

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    7-Zip 4.57 installieren

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;$cR!pT Start

    [/autoit] [autoit][/autoit] [autoit]

    ;7-Zip installieren

    [/autoit] [autoit][/autoit] [autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip", "UninstallString")
    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, '7-Zip 4.57', $msg)
    Case 1; 'Ok'
    If MsgBox(36,"Titel","Nach Deinstallation neu installieren?") = 6 Then _Go()
    Else
    Run($pfad)
    _Uninstall()
    Exit
    ;EndIf
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _Go()

    Func _Uninstall()
    $title1="7-Zip 4.57 Uninstall"
    WinWait($title1, "Uninstall")
    ControlClick($title1, "&Uninstall","Button2")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ShellExecute(@Scriptdir & "\7-Zip 4.57.exe")
    $title="7-Zip 4.57 Setup"
    WinWait($title, "Choose Install Location")
    ControlClick($title, "&Install","Button2")
    WinWait($title, "Completing")
    ControlClick($title, "&Finish","Button2")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;$cR!pT End

    [/autoit]

    Ich hoffe ich nerv nicht mit meinen Anfängerfragen :)

  • Mich nicht ;) aber:
    Seit wann kann man Funktionen so verschachteln?
    Und es fehlt ein EndIf.
    Also eigentlich muss das so sein (ich hab jetzt keine anderen Fehler auf die schnelle gefunden, korriegiert wenn ich was Vergessen hab):

    [autoit]


    #cs ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    AutoIt Version: 3.2.8.1
    Author: $cR!pT k!ddY

    [/autoit][autoit][/autoit][autoit]

    Script Function:
    7-Zip 4.57 installieren

    [/autoit][autoit][/autoit][autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    ;$cR!pT Start

    [/autoit][autoit][/autoit][autoit]

    ;7-Zip installieren

    [/autoit][autoit][/autoit][autoit]

    $pfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip", "UninstallString")
    If Not @error Then
    $msg = 'Programm ist bereits installiert.' & @CRLF & 'Programm deinstallieren?'
    Switch MsgBox(33, '7-Zip 4.57', $msg)
    Case 1; 'Ok'
    If MsgBox(36,"Titel","Nach Deinstallation neu installieren?") = 6 Then _Go()
    Else
    Run($pfad)
    _Uninstall()
    Exit
    EndIf
    Case 2; 'Abbrechen'
    Exit
    EndSwitch
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Func _Go()
    Call("_Uninstall")
    ShellExecute(@Scriptdir & "\7-Zip 4.57.exe")
    $title="7-Zip 4.57 Setup"
    WinWait($title, "Choose Install Location")
    ControlClick($title, "&Install","Button2")
    WinWait($title, "Completing")
    ControlClick($title, "&Finish","Button2")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Uninstall()
    $title1="7-Zip 4.57 Uninstall"
    WinWait($title1, "Uninstall")
    ControlClick($title1, "&Uninstall","Button2")
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Ja...des mit den Funktionen so verschachteln geht leida ned...hät ja klappen können...
    Vlt fällt mir ja was ein wie ich des anders schreib...einfach die funktionen anders schreiben, jeweils einen eigenen block und keine funktion in einer funktion....könnt ich dann wenn ich am anfang eine Funktion hab mit _IE und nach dieser _IE Funktion eine namens _WMP 11 aufgerufen wird, die aber von dem was sie machen soll in meinem code vor der _IE Funktion steht...geht so vor und zurückspringen überhaupt? mhm...

    Edit: Irgendwie schaff ich des scho wida ned...man @$%" .... des kann doch wohl wirklich ned so schwer sein...

    Einmal editiert, zuletzt von bugmenot1 (11. Dezember 2007 um 19:18)