![]() |
Druckdienst
Hallo DPler,
ich habe einen Dienst geschrieben der Daten über TCP empfängt und dann auf verschiedene Netzwerkdrucker ausdruckt (je nach Daten). Der Dienst läuft als Systemuser und das Problem mit dem Standarddrucker des Systemusers habe ich mit einem Registryeintrag gelöst. Alles funktioniert solange hervorragend, bis der Server neu gebootet wird (Windowsupdates etc.), dann hagelt es bei jedem Datensatz eine Exception (Zugriffsverletzung bei Adresse XXXXXXXX in Modul 'ServiceName.exe'. Lesen von Adresse 00000000). Um den richtigen Drucker einzustellen verwende ich folgenden Code:
Code:
und sobald ich auf die Druckerliste (Printers) zugreifen will kommt die Exception.
Printer.PrinterIndex := Printers.IndexOf(Druckername);
Wenn ich den Dienst dann beende und neu starte funktioniert auch alles, aber das ist ja nicht der Sinn und Zweck eines Dienstes. Ich vermute das ich irgendwelche Abhängigkeiten für den Dienst einstellen muß, nur welche?. Spooler habe ich schon versucht, war's nicht. Hat irgendwer noch 'ne Idee? Gruß aus dem regnerischen Dortmund Frank |
AW: Druckdienst
Dein Problem könnte sein, dass der Druckerdienst noch nicht (fertig) geladen ist sobald Dein Dienst startet.
Kannst Du bei dir mal ein Sleep(...) oder was zum Test einbauen. z.B: Den Namen des Druckdienstes (müsste man nachschauen) auf Start abprüfen?! Ist jetzt nur so ne Vermutung. Ich hatte auch mal ein Problem mit der Reihenfolge von Windows Diensten. Gruß Jürgen |
AW: Druckdienst
Ergänz mal die Abhängikeite das dein Dienst erst nach dem Druckerdienst startet.
|
AW: Druckdienst
Hallo jf_stgt,
wie schon in meinem ersten Posting geschrieben eine Abhängigkeit (dependency) zu Spooler (spoolsv.exe) habe ich schon ausprobiert, hat aber auch nicht geholfen. Gruß Frank |
AW: Druckdienst
Es scheint also irgendeine Abhängigkeit zu geben.
Du könntest zu Testzwecken einen Timer aufziehen, dort Deinen Code ausführen und in einem try finally Block schützen. Wenn es schiefgeht, startest Du den Timer in 1 s wieder. Nach ein paar Sekunden/Minuten sollte es ja dann irgendwann mal gehen. Dann kannst Du im Windows Ereignismonitor schauen welcher Dienst wann gestartet wurde und die siehst mit viel Glück Deine Abhängigkeit. Gruß Jürgen |
AW: Druckdienst
Hallo DPler,
und da bin ich wieder, immer noch mit dem gleichem Problem. Aber mit neuen Erkenntnissen.
Könnte es vielleicht daran liegen, dass das ganze unter W2k8 läuft (der funktionierende Dienst läuft unter XP) oder liegt es daran, dass das ein Server ist und der eigentlich nur "servt" d. h. kein aktiver Benutzer angemeldet ist (s.ä. wie der nicht vorhandene Standarddruckerdes Systemusers)? Wenn ich mich ja als Admin anmelde um den Dienst neu zu starten funktioniert es ja, aber wie installiert man beim Systemuser einen Drucker! Vielleicht doch noch jemand eine Idee. Grüße diesmal aus Kamen Frank |
AW: Druckdienst
Zitat:
Jetzt wieder zum ernsten Bereich: Dein Dienst muss nicht als System starten. Du kannst auch einen neunen Benutzer dafür anlegen. Mit diesem kannst du dich dann auch anmelden und die entsprechenden Grundlagen schaffen. Dies ist auch dahingehend besser, dass du ein gewisses Sicherheitskonzept umsetzen kannst, was dem System-User absolut verwehrt bleibt (er muss ja alle Rechte haben). Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz