AutoIt und MsiExec.exe mehrere instanzen

  • Hallo Leute,

    ich bastle gerade einen Aufräumer, welcher bestimmte mehrere Software deinstallieren soll. Es sollen dann immer die UninstallStrings aus der registry ausgeführt werden. Klappt alles..., BIS AUF:

    Es sind mehrere UninstallStrings --> Ich muss MsiExec.exe /X{ID} mehrmals und hintereinander (!) aufrufen, da MsiExec immer nur eine Instanz erlaubt. Ich habe die

    [autoit]

    Run("MsiExec.exe /X{IDs}")

    [/autoit]

    Jeweils hintereinander, und einzeln klappen die Aufrufe, aber da MsiExec wie erwähnt immer nur eine Instanz zulässt, rauscht der erste De-Install Befehl durch, und alles dahinter wird ignoriert.

    Ich würde es gern so einbauen, dass die nächste MsiExec.exe erst gestartet werden solll, wenn die vorherige beendet ist.. Die MsiExec.exe laufen SILENT ab, das heisst, es sind keine Fenster zu sehen, nur die MSiExec.exe im TaskMgr.exe --> Taskmanager.

    Und eine Mutterinstanz läuft ständig im hintergrund, gestartet vom System.

    Vielen Dank für Hilfe. CU fis

  • Zitat

    nur die MSiExec.exe im TaskMgr.exe

    Wen Du Dir alle User anzeigen lässt siehst Du das msiexec multiple Male während des Setups läuft.

    aber runwait passt schon ;)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Danke, RunWait() klingt ganz gut. Aber mein Grund funzt aus irgendeinem Code nicht immer?!?!

    [autoit]

    $bnvier= RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1509BFC3-CA03-4871-B406-094840928}", "UninstallString")
    If ($bnvier == "MsiExec.exe /X{1509BFC3-CA03-4871-B406-094840928}") Then
    RunWait("MsiExec.exe /X{1509BFC3-CA03-4871-B406-094840928} /QN /NORESTART")
    EndIf
    $bnfunf= RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{25E5949A-EF9F-406F-BAAC-092483483}", "UninstallString")
    If ($bnfunf == "MsiExec.exe /X{25E5949A-EF9F-406F-BAAC-092483483}") Then
    RunWait("MsiExec.exe /X{25E5949A-EF9F-406F-BAAC-092483483} /QN /NORESTART")
    EndIf
    $bnsechs= RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5CA1FC78-1829-4431-A384-98740938029809}", "UninstallString")
    If ($bnsechs == "MsiExec.exe /X{5CA1FC78-1829-4431-A384-98740938029809}") Then
    RunWait("MsiExec.exe /X{5CA1FC78-1829-4431-A384-98740938029809} /QN /NORESTART")
    EndIf

    [/autoit]

    Er sollte doch hier nach den einzelnen Schlüssel gucken und evtl. und vor allem nacheinander die MsiExec.exe starten?? Sieht jemand was auffälliges oder gar falsches?`

    THNX

  • Hab keinen Fehler gesehen, außer diesem

    Zitat von fis4test

    Aber mein Grund funzt aus irgendeinem Code nicht immer?!?!

    :rofl:

    Hab das jetzt aber mal abgekürtzt für dich zum testen.

    Spoiler anzeigen
    [autoit]

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1509BFC3-CA03-4871-B406-094840928}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{1509BFC3-CA03-4871-B406-094840928} /QN /NORESTART")

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

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{25E5949A-EF9F-406F-BAAC-092483483}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{25E5949A-EF9F-406F-BAAC-092483483} /QN /NORESTART")

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

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5CA1FC78-1829-4431-A384-98740938029809}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{5CA1FC78-1829-4431-A384-98740938029809} /QN /NORESTART")

    [/autoit]
  • [/spoiler]

    [autoit]

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1509BFC3-CA03-4871-B406-094840928}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{1509BFC3-CA03-4871-B406-094840928} /QN /NORESTART")

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

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{25E5949A-EF9F-406F-BAAC-092483483}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{25E5949A-EF9F-406F-BAAC-092483483} /QN /NORESTART")

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

    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5CA1FC78-1829-4431-A384-98740938029809}", "UninstallString")
    If Not @error Then RunWait("MsiExec.exe /X{5CA1FC78-1829-4431-A384-98740938029809} /QN /NORESTART")

    [/autoit]

    [/spoiler]


    Frage:

    1. Fehlen da nicht die EndIf am ende? Oder nicht nötig bei Einzeilern?


    2. Wenn es den ersten regKEy nicht gibt, ist ja @error true? Muss man @error vor der zweiten Abfrage nicht "resetten"? Wenn es zB den zweiten RegKey doch gibt, spuckt der nicht wider einen Fehler aus.. Oder macht das AutoIt vollautomatisch?

    3. Wie kopiere ich Quellcode hier ausm Forum?

    Mein Rechner ist besetzt... kann noch net testen :P Tjaa war eben wohl auch etwas verwirrt :rock: