Windows Dienst "MariaDB" Stoppen

  • Hallo.

    Ich versuche mich seit langem mal wieder etwas mit Autoit zu beschäftigen, da ich mir bei uns in der Freiwilligen Feuerwehr mal eine kleine Aufgabe gesteckt habe.

    Dabei will ich über ein Script die lokale "MariaDB" einer Dokumentation Software stoppen, damit der TCPPort 3306 Lokal frei wird, um via SSH Umleitung einen neuen Port setzen zu können.

    Das ganze ist für Remote Schulung von Kameraden für die Dokumentation gedacht, und da ist es einfacher wenn wir alle auf die gleiche Datenbank im Feuerwehrhaus zugreifen.

    Mein Script ist soweit auch schon fertig, aber ich bleibe hängen, da einige "wie ich" nur mit User Rechten auf dem Rechner arbeiten, und nur bei Bedarf auf einen Admin Account wechseln.

    Wenn ich jetzt via Script den Service MariaDB beenden möchte, braucht man aber halt Admin Rechte...

    Wie kann ich den Dienst beenden, bzw. dem User nach Admin Berechtigung fragen damit der Dienst dann beendet wird?

    Aktuell versuche ich es so:

    Ich hab auch schon durch div. Foren geguckt, wo oft von der "ServiceControl.au3" gesprochen wird. Hab mal die Version von hier geladen und mit "_StopService("MariaDB")" getestet, aber da hab ich gleiche Problem, sprich es wird einfach mit einem Fehler abgebrochen...

    Da hat doch bestimmt einer von Euch eine smarte Idee wie ist das bewerkstelligen kann, oder?

    Viele Grüße

    Stefan

  • Wie wäre es über
    RunWait(@COMSPEC & " /c net stop dienst")
    es zu stoppen und dann dort weiter zu machen?

    Fehler? Welcher Fehler?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi Alina.

    Ich weiß gerade nicht was Du genau meinst?

    Ich verwende doch schon "RunWait"...

    Aber Du liegst richtig, es kommt gar kein Fehler oder @error...

    Es wird mir nur "2" als ExitCode des Ausführenden Programm zurück gegeben...

    Code
    ConsoleWrite (@CRLF & "error: " & @error)
    $status = RunWait(@COMSPEC & " /c net stop mariadb")
    
    ConsoleWrite (@CRLF & "error: " & @error)
    ConsoleWrite (@CRLF & "Status: " & $status)

    Wenn ich das z.B. über die Standard CMD Console von Windows ausführe sehe ich folgenden Fehler:

    C:\Users\Stefan>net stop mariadb

    Systemfehler 5 aufgetreten.

    Zugriff verweigert

    C:\Users\Stefan>


    Viele Grüße

    Stefan

  • Hast Du mal versucht, #RequireAdmin am Anfang Deines Skriptes zu setzen ?

    Ansonsten wirf einen Blick in die Hilfe zu RunAsWait / RunAs

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hi.

    Ein "Problem" habe ich jetzt doch noch...

    Durch das #RequireAdmin werden wirklich alle Prozesse unter dem Admin User ausgeführt. Das brauche ich eigentlich nur um die Maria DB zu beenden.

    Ein Programm was ich via dem Script ausführen will, soll aber weiter mit User Berechtigungen laufen...

    Könnte es mit RunAs ausführen, müsste aber irgendwie auslesen, welcher User vor dem #RequireAdmin überhaupt das script gestartet hat...

    Oder gibt es sonst eine Möglichkeit verschiedene Funktionen mit verschieden Usern / Berechtigungen aufzurufen?

  • Schreib dir doch eine separate .exe dafür, die NUR dazu da ist MariaDB zu beenden. In diesem Script packst du dann das #RequireAdmin hinein.

    Und im eigentlichen Hauptprogramm startest du dann diese .exe wenn MariaDB beendet werden soll.

    So würde ich das lösen.

    Dieser .exe kannst du auch im Idealfall Daten als Parameter übergeben (zB den Prozessnamen, der beendet werden soll).

    Somit kann diese .exe auch effektiv nur von deinem Programm genutzt werden.

    Einfach nur doppelt klicken darauf wird dann diese .exe nicht funktionieren lassen.

    mfG Lo..

  • Der Lösungsansatz von Lottich wäre ein durchaus akzeptabler Weg !

    Könnte es mit RunAs ausführen, müsste aber irgendwie auslesen, welcher User vor dem #RequireAdmin überhaupt das script gestartet hat...

    In diesem Fall brauchst Du das #RequireAdmin gar nicht. Das Skript würde im Kontext des jeweiligen Users gestartet. Die erhöhten Rechte werden durch RunAs/RunAsWait erteilt.

    EDIT : Da haben wir wohl unsere Beiträge zur selben Zeit abgesendet ^^.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."