1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. rose0805

Beiträge von rose0805

  • Script als Dienst / Fehler 1053

    • rose0805
    • 8. Dezember 2014 um 13:15

    Hallo Gemeinde.

    Ich beschäftige mich erst seit kurzem mit Programmierung und AutoScript.
    Bitte verzeiht mir, dass ich ein Thema noch einmal aufwärme. Die Threads die ich hier und im Internet gefunden habe verstehe ich nicht, oder kann Sie nicht umsetzen.

    Es wäre schön wenn mir jemand helfen könnte, und zwar so das ich es verstehe...

    Ich möchte einen AutoitScript (Version 3.3.12.0) als Dienst unter Windows 2003 32Bit laufen lassen.
    Ich habe diverse Scripts gefunden, mit der ich die .exe auch wunderbar in die Diensteverwaltung bekomme.
    Ich hab es auch mit sc create und installsrv /srvany probiert.
    Die Registry Einträge (Parameters/Application wird zB. oft genannt) sind da...

    Ich gehe davon aus, dass das "erstellen des Dienstes funktioniert" hat?! und es an der Programmierung liegt.

    Wenn ich den Dienst starten möchte kommt die Fehlermeldung :
    "Der Dienst xxx auf "lokaler Computer" konnte nicht gestartet werden. Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung."
    (Zu dem Thema habe ich auch Google Einträge gefunden. Wenn ich dort fündig geworden wäre würd ich hier nix schreiben.)

    Mit dem DOS Befehl "net start Dienst" bleibt das Starten des Dienstes gar hängen und läst sich nicht mehr beenden. Reboot oder sc delete sind dann nötig.
    Der Start über die Dienste bringt diesen Fehler nicht, da kommt die Fehlermeldung artig.

    In einigen Threads habe ich gelesen, dass das als lokales Systemkonto mit Datenaustausch zwischen Dienst und Desktop zulassen aktiviert sein muss. Hab ich aktiviert.
    Auch in den Ereignisprotokollen (die sind eingeschaltet, der Tipp hatte auch keinen Erfolg gebracht) finde ich keine Fehlereinträge.

    In einem Beitrag habe ich gelesen, dass das an der While Schleife liegen könnte, daher o.g. Anmeldung mit Datenaustausch Option.
    Und dass das Script "Diensttauglich" programmiert sein muss.
    Das hilft mir aber nicht.... was muss ich dafür machen???

    Rufe ich die kompilierte .exe normal über Explorer etc. auf funzt das wie dopp.

    Mein Problem ist, dass der Script immer laufen soll. Melde ich mich vom Windows 2003 aus der RDP Session ab, wird das Programm nicht mehr ausgeführt ?!?!?
    Ja, ich könnte mich mit einem anderen User anmelden, und die Session ohne abmelden beenden, das will ich aber nicht. Das macht das Rebooten zu kompliziert.

    Es muss doch als Dienst gehen, ich kapier es nur nicht...
    Außerdem will ich daran lernen wie das funktioniert. Also bitte keinen Shitstorm über mich herabregenen lassen ;)


    Das gefundene und angepasste Script sucht in definierten Verzeichnissen nach PDF Dateien, und druckt diese auf lokal angelegten Druckern aus.

    Vielleicht hat jemand eine Idee......

    By the way und bitte als Nebenfrage betrachten:
    Bestimmt hat jemand Optimierungvorschläge, wenn mehere Druckerverzeichnisse überwacht werden sollen.
    Für sowas muss es doch auch eine Schleife oder etwas eleganteres geben.

    Code
    ;Pfad zu PDF Viewer
    $program = "C:\Programme\SumatraPDF"
    
    
    $pathtosetdefaultprinter = "c:\AutoIt\Program"
    $standardprinter = "P040"
    $P1 = "P003"
    $P2 = "P006"
    
    
    ; Pfad der auf neue Dateien überwacht werden soll
    ; Recht muss vorhanden sein
    $source = "T:\_PDF_Druck\"
    
    
    $sP1 = $source & $P1
    $sP2 = $source & $P2
    
    
    ; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
    $dest = "T:\_PDF_Druck\save"
    
    
    ; Dauer des Prüfintervalls in Millisekunden (10 Sek = 10000)
    $interval = 5000
    
    
    While 1
     Sleep($interval)
     
     ; Druckverzeichnisse für jeden Drucker erstellen falls es mal geloescht wird
     DirCreate($sP1)
     DirCreate($sP2)
     
     ; Durchsuchen der Verzeichnisse nach PDF Dateien
     $file1 = FileFindFirstFile ($sP1 & "\*.pdf")
     If $file1 <> -1 then Print1()
     FileClose($file1)
     
     $file2 = FileFindFirstFile ($sP2 & "\*.pdf")
     If $file2 <> -1 then Print2()
     FileClose($file2)
     
     
    WEnd
    
    
    Func Print1()
    
    
    RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $P1, "", @SW_HIDE)
    
    
     While 1
      $pdffile = FileFindNextFile($file1)
      If @error then ExitLoop
      RunWait('"' & $program & '\SumatraPDF.exe" -print-to '& $P1 &' -silent -exit-when-done "' & $sP1 & '\' & $pdffile & '"')
      ;#FileMove($source & '\' & $pdffile , $dest, 1)
        FileDelete($sP1 & '\' & $pdffile)
    
    
     WEnd
     
      RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $standardprinter, "", @SW_HIDE)
     
    EndFunc
    
    
    ;-------
    
    
    Func Print2()
    
    
    RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $P2, "", @SW_HIDE)
    
    
     While 1
      $pdffile = FileFindNextFile($file2)
      If @error then ExitLoop
      RunWait('"' & $program & '\SumatraPDF.exe" -print-to '& $P2 &' -silent -exit-when-done "' & $sP2 & '\' & $pdffile & '"')
        FileDelete($sP2 & '\' & $pdffile)
    
    
     WEnd
     
      RunWait($pathtosetdefaultprinter & "\SetDefaultPrinter.exe " & $standardprinter, "", @SW_HIDE)
     
    EndFunc
    
    
    Func Quit()
     Exit
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™