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.
;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