Prozess startet ohne GUI

  • Servus Leute


    ich habe das Problem das ich einen Dienst habe der einen Prozess überwacht ob der gestartet ist. Wenn dieser Prozess da ist wird ein Autoit Script ( exe ) gestartet.

    Jetzt ist das sauber so das wenn ich mein Autoit Programm per Doppelklick Starte ist meine GUI da wenn der Überwachung's Prozess mein Programm Startet ist der Prozess zwar gestartet aber die GUI kommt nicht hoch.


    Das Programm das als Dienst läuft ist so aufgebaut.

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • Ich habe schon alle möglichen Startarten probiert Run , ShellExecute usw immer das selbe Problem.


    Kann mir jemand vielleicht einen Tip gaben


    Danke


    Gruss Arno

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • So sooooooo Hilfe suchst Du?

    man mag mich hier im Forum verprügeln - ich habe ein breites Kreuz. Wobei suchst Du Hilfe?


    ....... ich habe das Problem das ich einen Dienst habe der einen Prozess überwacht ob der gestartet ist. Wenn dieser Prozess da ist wird ein Autoit Script ( exe ) gestartet.

    Jetzt ist das sauber so das wenn ich mein Autoit Programm per Doppelklick Starte ist meine GUI da wenn der Überwachung's Prozess mein Programm Startet ist der Prozess zwar gestartet aber die GUI kommt nicht hoch.......


    Im Formulieren halbwegs brauchbarer Sätze? Oder bei der Programmierung eines Generators zum Aneinanderfügen sinnloser Worte? Liest doch mal was Du dann schreibst und frage Dich ob das jemand, auch jemand nur ansatzweise, verstehen kann?

    Aber klar, man ist ja ein Opfer der verfehlen deutschen Schulpolitik.....


    Peter


    ----


    Edit... : Alternativ hättest Du vielleicht auch schreiben können:


    ....Wäre unabhängig von der gegenwärtigen Entwicklung feststellbar, dass die Spekulation zentralisiert verifiziert eigentlich weitgehend unerkannt bleibt, impliziert dies automatisch, dass die Aussagekraft derivativ naturnah verstanden wird, wobei hingegen die Technisierung endokrin manipulativ ausufert.....


    Gibt es da http://homepageberatung.at/con…lshit_generator/index.php 


    Also mach Dir keine Mühe mit eigener Software - gibt es schon....


    Hinweise auf Suchmaschienen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Peter S. Taler ()

  • Servus ( $ProgPath = StringTrimRight(@ScriptDir,"8") ) da kürze ich den Pfad nur.

    Der Prozess QueueWatch.exe wird gestartet nur ohne GUI.

    Das ist nur der obere Teil


    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • Hallo Peter

    sorry die Formulierung meiner Sätze nicht deinen gehobenen Ansprüchen entsprechend sind.

    Ich würde dich bitte immer schön höflich zu bleiben und wenn es dich stört einfach mein geschriebenes Ignorieren.

    Du musst ja nicht antworten.

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • mcbaldrian ,

    da allerding sehe ich ein Problem!

    1) wer ist unhöflich?

    2) ich habe keinen Anspruch an gehobene Sprache - nur etwas gegen (wenn Du es höflich nicht verstehst) dummes sinnloses gebabble.

    3) Nun darfst Du mich gerne als unhöflich bezeichnen


    Peter



    Hinweise auf Suchmaschienen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

  • Weist du was Peter,


    genau wegen solchen Leuten wir dir ist es mir eigentlich zu Blöde in einem Forum eine Frage zu stellen.

    Es kommt nur Bla Bla Bla wie hast du schon gegoogelt....


    Von mir aus kann mann meinen Post schließen. Ich finde schon eine Lösung.


    Wenn ich mein Problem schlecht beschrieben habe warum fragt du nicht einfach oder ignorierte den Post einfach aber nein

    es ist mal wieder einer da der Blöd daherreden muss sowas kotzt mich an.

    Wenns was intelligent dazu beizutragen hast gerne ....... ansonsten schnauze


    schönen tag noch

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • Naja was nun was startet und auf was wartet und wie was von was gestartet wurde oder wird ist hier wirklich nicht klar.

    Versuchs noch mal ein wenig simpler ohne tausend Worte...


    Beispiel:

    - Script A startet automatisch per windows Dienst und läuft auf dem system account

    oder

    - Script A wurd bei Bedarf manuell gestartet und läuft mit Administratorberechtigungen (Benutzerkontensteuerung meldet sich)

    - Script B prüft / wartet ob Script A läuft, Script B wird mit einfachen Benutzerrechten ausgeführt

    - Script C soll von Script B gestartet werden wenn Script A existiert


    So wäre das wenigstens einfach und verständlich.


    Warum hab ich hier die Zusatzinfo drin was mit welchen Rechten / Accounts ausgeführt wird?

    Weil das eine wichtige Rolle spielt welche Prozesse dein Überwachungsscript überhaupt sehen kann und ggf. auch ob du als Benutzer letzlich eine GUI siehst oder nicht (Stichwort: interaktiver Dienst)



    Wie dem auch sei... alles nur Vermutungen, weil du deine Situation und die Randbedingungen völlig unzureichend beschrieben hast.


    Ahja und Debugging schadet auch nicht, wenn man den Dateipfad schon so ungewöhnlich und unsicher zusammenbastelt. Lass dir doch mal den Pfad in einer msgbox ausgeben. ;-)


    EDIT:


    Ahja den zweiten Quellcode erst gerade gesehn... wie wärs mal das ganze ohne singleton zu versuchen? Denn wenn das nicht korrekt funktioniert beendet sich deine GUI bevor sie sichtbar wird.

  • mcbaldrian ,

    sag mal bist Du schlecht erzogen oder hast Du ev. einen IQ von 70? Willst Du nicht verstehen wo Dein Problem liegt?

    Im übrigen läßt Du jeglichen vernünftigen Umgangston vermissen! Ich glaube ich schließe mich doch noch der Signatur von Andy an:


    .... Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski.....


    Im übrigen - das scheinst Du - neben einigen anderen Dingen NICHT zu verstehen - klare Fehlerbeschreibung - hilft oftmals den Fehler selbst zu finden aber auf jeden FAll den anderen DIR zu helfen. Verwirrtes stammeln und wüste Beschimpfungen bringen niemanden weiter


    Peter


    Ps.: Und NEiN Du kannst Dich weiter besabbern - für mich ist das Thema damit beendet

    Hinweise auf Suchmaschienen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

  • Servus misterspeed


    als ich habe einen dienst in Audit geschrieben ( läuft unter system ) der einen Prozess ( Fremdsoftware ) überwacht ob er läuft oder nicht.

    Wenn dieser Prozess ( Fremdsoftware ) gestartet wird soll eine anderes Programm ( auch Autoit mit GUI ) gestartet werden.

    Das Problem ist jetzt das mein Programm startet aber nur der Prozess ich sehe keine GUI. Starte ich mein Programm direkt kein Problem GUI da alles gut.


    Ich verstehe momentan nicht wo das genau Problem liegt.


    Ja das mit dem Datei Pfad war :-) nicht optimal ich weis ist auch schon wieder geändert.


    Ich hoffe das ist jetzt so einigermaßen verständlich was ich mache und was ich für ein Problem habe.


    gruss Arno

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • Ich kann in deinem Code nichts entdecken, was das Problem erklären würde...

    Meine Vermutungen wären: Bei den guisetstate() befehlen das fenster mitübergeben, vielleicht wird da was durcheinandergebracht...

    Ansonsten: Von welchem Benutzer wird dein Dienst ausgeführt? Wenn du den Dienst z.B. vom System ausführen lässt und dort einen anderen Prozess startest läuft dieser ebenfalls im System-Benutzer und das Fenster taucht bei dir als User XXX nicht auf. Stattdessen würde das Fenster bei dem System-User erscheinen, bzw. garnicht, da man sich nicht als dieser einloggen kann.

    Ein Befehl, den ich auf die schnelle gefunden habe:

    Code
    1. runas /user:cybuser@charlottenburg "cybcli.exe"

    Wenn du das dann in AutoIT umsetzt mit dir als Nutzer, oder dem Aktuellen Nutzer, sollte es klappen :)


    MfG Kanashius

  • So, hallo zusammen. ;-)


    Jetzt mal zum Rekapitulieren mcbaldrian , ob ich richtig liege. So ganz klar ist das aus deinen Formulierungen nicht wirklich. Kann sehr gut sein dass ich falsch liege, aber mal sehen. :-)


    Du hast einen Dienst. Dieser ist in AutoIt gescriptet und befindet sich als Quellcode in deinem Startpost. Korrekt?

    So. Dann wollen wir uns den mal vorknöpfen.

    Meiner Meinung nach braucht es keinen einzigen dieser Includes. File.au3 brauchst du nur bei Funktionen die mit _File... beginnen (sogenannte UDFs / benutzerdefinierte Funktionen, die nicht standardmäßig in AutoIt eingebaut sind.) Array.au3 nur bei _Array...-Funktionen, und bei String dasselbe.


    So. Dann muss ich erstmal deine seltsam anmutende For-Schleife anmaulen. :saint: Anstatt eine For-Schleife zu basteln, die von 0 bis 2880 zählt, und die Zählervariable im For-Block irgendwann wieder auf 0 zurücksetzt... da kannst du gleich von 0 auf 100 zählen und i jedes mal auf 0 setzen :D Scherz beiseite, im Ernst: Du machst eine While-Schleife. Das Ding soll ja wohl eh in Endlosschleife laufen. Sähe so aus:


    Code
    1. While 1
    2. if ProcessExists("cceWork.exe") Then
    3. $ProgPath = StringTrimRight(@ScriptDir,"8")
    4. ShellExecute($ProgPath & "\QueueWatch.exe","","","",@SW_SHOW)
    5. FileWriteLine(@ScriptDir & "\log.txt", @error & " " & " " & $ProgPath & "\QueueWatch.exe" & " " & @CRLF)
    6. EndIf
    7. Sleep(30100)
    8. WEnd

    So. cceWork.exe scheint also der Prozess zu sein auf dessen Existenz du prüfen willst. Der if-Block wird allerdings nur alle 30 Sekunden ausgeführt. Das bedeutet, dass es rein theoretisch sein könnte, dass folgender Ablauf zustande kommt:


    Dienst: Checkt ob Prozess da ist >> ist nicht da >> wartet 30 sekunden

    Zeitgleich mit dem Warten ist cceWork mal für 5 Sekunden da und das checkt dein Dienst natürlich nicht. Mit anderen Worten - wirklich sicher ist deine Überprüfung nicht.


    Und was die anderen drei Zeilen machen sollen ist mir nur so mittelmäßig klar, was du jetzt da überhaupt splitten kannst.

    Warum splittest du rechts 8 Zeichen vom ScriptDir weg? Ich kann nur vermuten - du meinst @ScriptDir enthält den Programmpfad und du willst den Dateinamen weg tun. Sollte das der Fall sein - nein, @ScriptDir ist der Ordner wo sich das Skript/die Exe befindet. Falls nein - dann erkläre doch bitte was du da treiben willst.

    Ob die QueueWatch.exe den richtigen Pfad erhält ist schleierhaft. das @SW_SHOW kannst Du dir übrigens klemmen denke ich. Gezeigt wird wenn es eine GUI gibt im Normalfall imme soweit ich weiß. Und warum du in der ZEile 3 im If-Block mit @error ankommst und am Ende noch trotz FileWriteLine ein @CRLF anklemmst... erkläre doch bitte nochmal was genau da ablaufen soll. :-)

  • Meine Vermutungen wären: Bei den guisetstate() befehlen das fenster mitübergeben, vielleicht wird da was durcheinandergebracht...

    Habe ich auch vermutet. Nur habe ich eben getestet ob es daran liegen kann und nacheinander zwei Forms erstellt mit jeweils dem @SW_SHOW Aufruf.

    Ändere ich das zweite zu @SW_HIDE kommt das erste trotzdem. Abgesehen davon sagt die AutoIt Hilfe dazu

    Zitat


    [optional] Windows handle as returned by GUICreate() (default is the previously used window).

    was auch erklärt warum es bei mir ging.

    Daher: Bitte den kompletten quellcode posten. Danke!

  • Code
    runas /user:cybuser@charlottenburg "cybcli.exe"

    Wenn du das dann in AutoIT umsetzt mit dir als Nutzer, oder dem Aktuellen Nutzer, sollte es klappen

    Sorry für erneuten Post und Kritik an deiner Idee, Kanashius  :-)


    Aber: Lieber gleich die Built-In-Funktion RunAs verwenden, die unterstützt gleich Benutzername- und Passwortübergabe und das ist dann ein wenig angenehmer als über die CMD herauszufinden warum das Programm evtl. nicht startet. Da kannst du gleich das Makro @Username verwenden und das Passwort weißt Du entweder oder du lässt es dir per InputBox geben - oder du brauchst es gar nicht. keine Ahnung wie das dann ist. Aber wie gesagt - Fragen beantworten, Quellcode posten, erst dann neu testen. :-)

  • als ich habe einen dienst in Audit geschrieben ( läuft unter system ) der einen Prozess ( Fremdsoftware ) überwacht ob er läuft oder nicht.

    Wenn dieser Prozess ( Fremdsoftware ) gestartet wird soll eine anderes Programm ( auch Autoit mit GUI ) gestartet werden.

    Das Problem ist jetzt das mein Programm startet aber nur der Prozess ich sehe keine GUI. Starte ich mein Programm direkt kein Problem GUI da alles gut.

    Ja dann wird es eben wie von mir vermutet sein. Dein Überwachungsdienst läuft als User SYSTEM, alles was der Dienst tut passiert ebenfalls als User SYSTEM, somit läuft letztlich auch dein GUI Script auf dem SYSTEM Account und nicht auf dem Account des angemeldeten Benutzers. Die GUI ist da, aber du siehst sie eben nicht, weil du nich der User SYSTEM bist, bzw der User SYSTEM garkeinen aktiven Desktop hat auf dem irgendwas grafisches angezeigt werden könnte.


    Lektüre zum Thema:


    https://www.howtogeek.com/scho…tools-like-a-pro/lesson8/


    Zitat

    What Are Services Exactly?

    Windows services are a special type of application that is configured to launch and run in the background, in some cases before the user has even logged in. They can be configured to run as the local system account. Services are designed to run continuously in the background and perform system tasks, like backing up your computer or running a server process that listens on a network port.

    Back in the Windows XP days, services could be configured to run interactively and run alongside the rest of your applications, but since Vista, all services are forced to run in a special window session that can’t interact with your local desktop. So a service that tries to open a dialog box or show you a message won’t be allowed to do so.


  • Hallo Leute


    ich danke euch für die Vielen Infos aber ich mache es jetzt ganz anders.

    Mein Dienst wird jetzt als Programm ( Autostart all users registry ) ausgeführt und somit ist das Problem gelöst funktioniert einwandfrei.

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

  • Moin,


    Das Problem wird eher folgendes sein:

    Wenn das Programm als Dienst gestartet ist gibt es erst einmal keine Interaktion mit dem Desktop. Die GUI ist zwar da, nur sieht diese niemand. Hängt auch davon ab unter welchen Benutzer der Dienst gestartet ist - läuft der als Benutzer "SYSTEM" kann der angemeldete Benutzer "Manfred" natürlich dessen GUI nicht sehen.

    Der Dienst müsste das für den Benutzer Manfred starten - geht z.B. bei der Aufgabenplanung, da gibt es ein extra Häkchen ob diese mit dem Desktop interagieren kann.

    Allerdings müsste der Dienst dann auch die Anmeldedaten vom Benutzer "Manfred" wissen


    Bei vielen Programmen die als Dienst laufen aber auch dem Benutzer z.B. ein Symbol in der Taskleiste anzeigen wird sind es deshalb 2 verschiedene Programme - ein Dienst und ein Programm für die Taskleiste. Diese kommunizieren dann ggf. miteinander. Nebenbei wird es so auch einfacher Multiuser-fähig - Es können ja, auch auf einem normalen Windows Desktop, mehrere Personen gleichzeitig angemeldet sein (Benutzer wechseln).


    BLinz