AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Druckdienst

Ein Thema von gravedigger · begonnen am 26. Jul 2011 · letzter Beitrag vom 30. Jul 2011
Antwort Antwort
Benutzerbild von gravedigger
gravedigger

Registriert seit: 10. Mai 2007
Ort: Kamen
16 Beiträge
 
Delphi XE5 Professional
 
#1

Druckdienst

  Alt 26. Jul 2011, 11:20
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:
Printer.PrinterIndex := Printers.IndexOf(Druckername);
und sobald ich auf die Druckerliste (Printers) zugreifen will kommt die Exception.
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
Frank
  Mit Zitat antworten Zitat
jf_stgt

Registriert seit: 26. Sep 2008
33 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Druckdienst

  Alt 26. Jul 2011, 11:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Druckdienst

  Alt 26. Jul 2011, 11:39
Ergänz mal die Abhängikeite das dein Dienst erst nach dem Druckerdienst startet.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von gravedigger
gravedigger

Registriert seit: 10. Mai 2007
Ort: Kamen
16 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Druckdienst

  Alt 26. Jul 2011, 11:44
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
Frank
  Mit Zitat antworten Zitat
jf_stgt

Registriert seit: 26. Sep 2008
33 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Druckdienst

  Alt 26. Jul 2011, 14:28
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
  Mit Zitat antworten Zitat
Benutzerbild von gravedigger
gravedigger

Registriert seit: 10. Mai 2007
Ort: Kamen
16 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Druckdienst

  Alt 29. Jul 2011, 21:12
Hallo DPler,

und da bin ich wieder, immer noch mit dem gleichem Problem. Aber mit neuen Erkenntnissen.
  1. Die Druckerliste mit EnumPrinters selber holen, funktioniert auch nicht.
  2. Habe mir aus der Registry die Reihenfolge der Dienste geholt und den letzten genommen und als Abhängigkeit hinzugefügt, das gleiche Ergebnis.
  3. In einem anderen Dienst (anderer Rechner, anderes OS) funktioniert es. Also Unterschiede gesucht, angepasst, geht auch nicht.
... und noch ein paar andere Versuche die alle nichts gebracht haben.

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
Frank
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Druckdienst

  Alt 30. Jul 2011, 00:33
Wenn ich mich ja als Admin anmelde um den Dienst neu zu starten funktioniert es ja, aber wie installiert man beim Systemuser einen Drucker!
Ganz einfach: Man trickst die Windows-Anmeldung aus und meldet sich dann als System an.

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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz