Anwender Prozess/Anwendung vor Neuinstallation beenden

  • Hallo,

    ich habe da ein Problem bei einer Installation. Vor der Installation (Update) sollte ein laufenden Programm beendet werden, damit die Installation durchläuft.
    Das funktioniert auch ganz schön, wenn ich mit Hilfe von ProcessClose den Prozess im Userkontext beenden, d. h. es funktioniert, wenn ich es mit dem gleichen Account beende mit dem ich zuvor die Anwendung gestartet habe.

    Code
    $PID = ProcessExists("notepad.exe") 
    If $PID Then ProcessClose($PID)

    Allerdings installiert ein Anwender normalerweise nix, sondern dass macht ein administrativer Account. Dieser hat jedoch anscheinend keine Rechte dies mit der Funktion ProcessClose zu machen. Mit Hilfe des Konsolenkommandos "taskkill /PID #" (unter XP z. B.) funktioniert es dagegen.

    Jetzt könnte ich natürlich mit den Shell-Kommandos herummachen, aber wozu habe ich AutoIt, außerdem sollte das Ganze natürlich auch unter W2003, W2K und WXP laufen...

    Hat jemand eine Idee?

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

    Einmal editiert, zuletzt von ahe (29. Juni 2009 um 14:21)

  • Hi,
    das der Anwender nix installiert ist ok, aber wenn du als Admin dann was installierst, must du doch den User eb abmelden und dich als admin abmelden. Oder benutzt du da einen anderen Weg? Wenn ja sollte der User (das Skript) vorher das Programm beenden.

    MfG
    Der_Dco

  • Sorry für die späte Rückmeldung, war etwas un-fit...

    installieren kann man auch per "runas" oder aber per laufenden Systemprozess eines Softwareverteilungstools. D. h. während der Anwender angemeldet ist wird per Dienst oder Runas-Kommando Software im Hintergrund installiert.

    Das funktioniert eigentlich recht gut, auch das Beenden von laufenden Tasks mit Hilfe von Taskkill oder PSKill, allerdings nicht mit AutoIt...

    Da ich einige ältere Batches ablösen möchte und die Abfragerei leid bin, ob ein Tool nun bei diesem OS vorhanden ist oder nicht, dachte ich stelle mein Skript komplett auf AutoIt um...

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Meine bisherigen "Lösungen" mit "Dritt"-Tools:

    Lösung mit taskkill: (läuft nur unter XP und Windows 2003)

    [autoit]


    Run(@ComSpec & " /c taskkill.exe /t /im pjreader.exe", "", @SW_HIDE)

    [/autoit]

    Lösung mit pskill: (läuft auch unter Windows 2000)

    [autoit]

    $WorkDir = @TempDir & "\test\gnuffz\"
    $pspath = $WorkDir & "pskill.exe -t " ; Befehlszeile
    DirCreate ($WorkDir) ; Temp Verz. fÜr die installation erstellen
    FileInstall ("D:\testscripte\gnuffz\pskill.exe", $WorkDir,1 ) ; Sourcedatei einfügen
    $PID = ProcessExists("gnuffz.exe") ; Liefert die PID oder 0 wenn der Process nicht gefunden wurde
    If $PID Then Run($pspath & $PID, "", @SW_HIDE)
    . . .
    DirRemove ($WorkDir,1) ; Löschen des Installationsverzeichnisses

    [/autoit]

    Vielleicht hat ja jemand noch eine Idee, wie ich ohne die Tools auskomme...

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Hi,
    also wenn du das Programm (Task) net als Admin beenden darfst (wenn der User noch angemeldet ist) würde ich deine 2. Lösung nehmen.

    Grund:
    Ich mag die PSTools ;)

    Sonst nutze ich wenn autoit net geht oder zu umständlich ist auch die PSTools.

    MfG
    Der_Doc

  • Hallo Doc,

    ich arbeite auch sehr gerne mit den PS-Tools, allerdings sind wir nicht die Einzigen und daher verhindern manche Virenchecker (bzw. Scanengines) die Nutzung. (z. B. McAfee, AVG,...) Einzige Möglichkeit ist, die entsprechenden EXE Dateien vom Scan auszuschließen, das wird aber von einigen Sicherheitsbeauftragten nicht so gerne gesehen ... :sleeping: Manchmal ändert sich das auch von Update zu Update und das wäre nicht so geschickt, wenn die Installation mal funktioniert und mal nicht. Das erleichtert nicht gerade die Fehlersuche... ;(

    Daher wäre mir eine reine AutoIt Lösung immer noch lieber :)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Hallo Doc,

    ja, dort habe ich auch schon etwas gestöbert, allerdings bislang nur die "ProcessClose" Lösung gefunden... (die Übersicht ist in diesem Forum aber etwas gewöhnungsbedürftig...)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Kleiner Hinweis zu pskill.

    Seit der letzten PsKill Version (v1.12) unter der Regie von MS erscheint beim erstmaligen Start eine Lizenz Meldung, da man diese aber normalerweise in einem silent Skript nicht sieht, funktioniert das Beenden nicht.
    Beim erstmaligen Start der sysinternals Tools wird beim Anwender ein Registry-Key erzeugt. Wird die Lizenzmeldung bestätigt, wird ein entsprechender Wert für "EulaAccepted" eingetragen, ansonsten erscheint die Meldung immer wieder.

    Wenn jetzt pskill als Local System (oder anderer User) ausgeführt werden soll, muss zuvor der folgende Registryeintrag gesetzt werden:

    Code
    Windows Registry Editor Version 5.00
    
    
    [HKEY_USERS\S-1-5-18\Software\Sysinternals\PsKill]
    "EulaAccepted"=dword:00000001

    Bei der alten Version von PsKill (v1.11) war dies noch nicht nötig!

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Hallo Doc,

    das fluchen habe ich schon besorgt :cursing: , hat mich ein paar Stunden Fehlersuche gekostet, da ich unsere McAfee EPO Konfiguratoren im Verdacht hatte Einstellengen verändert zu haben, und Script mehrfach umgebaut hatte.
    Es viel mir erst auf, als ich in der Run Funktion nicht @SW_HIDE, sondern @SW_MAXIMIZE eingetragen hatte und den Pakettest auf einem neu installierten frischen Rechner startete... 8|

    So wie es aussieht betrifft es alle Tools aus der aktuellen Sysinternals Suite bzw. die Tools die man aktuell auch einzeln herunterladen kann. (ich habe diverse gestartet und jedes Mal die Meldung bekommen...)

    Wieder ein Grund mehr, das Prozess killen nur mit AutoIt-Funktionen durchzuführen... :)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.