Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TService & Windows7: pdf-/txt-Datei drucken (https://www.delphipraxis.net/160387-tservice-windows7-pdf-txt-datei-drucken.html)

HolgerMaune 10. Mai 2011 21:08

TService & Windows7: pdf-/txt-Datei drucken
 
Hallo,

hat jemand eine Idee, wie ich unter Windows7 aus einem Dienst eine pdf- pder eine txt-Datei drucken kann. Der direkte Aufruf von
Code:
ShellExecute(Application.Handle, 'printto', PChar(Dokument), PChar(printerInfo), NIL, SW_HIDE);
schlägt unter dem Systemkonto fehl, da keine Drucker installiert sind (und wohl auch nicht können). Wenn ich den Dienst mit einem anderen Benutzeraccount (inkl installierter Drucker) starte, kommt leider auch nichts aus dem Drucker.

Meine Recherche hat bisher nur ergeben, dass MS etwas an den Zugriffseinstellungen für Win7 geändert hat. Eine Lösung für mein Problem konnte ich bisher jedoch nicht finden.

Danke für Eure Hilfe.


Grüße


Holger

rollstuhlfahrer 10. Mai 2011 21:42

AW: TService & Windows7: pdf-/txt-Datei drucken
 
Hallo und herzlich Willkommen in der DP :dp: :dp:

Im Notfall ein "externes" Programm benutzen, welches im Benutzerkontext ausgeführt wird und dann den Druckauftrag abgibt.

Bernhard

himitsu 10. Mai 2011 21:55

AW: TService & Windows7: pdf-/txt-Datei drucken
 
@rollstuhlfahrer: Das versucht er ja ... Also, er versucht über printto das Standardprogramm für PDFs zu starten und dieses soll dann drucken. :zwinker:
Ich vermute einfach mal, daß eventuell sogar der Druckertreiber vorhanden ist, aber im Systemkonto sind andere Registry-Pfade verlinkt
und da werden wohl einfach keine Verlinkungen für *.PDF eingetragen sein.
Sowas läßt sich übrigens rausfinden, indem man mal die Rückgabewerte (Result) von MSDN-Library durchsuchenShellExecute prüft.

Vor Kurzem (diese/letzte Woche) gab es hier in der DP einen Thread, wo es darum ging, wie man von einem Service aus z.B. ein Programm im Benutzerkontext starten kann.
Das würde dann ganz bestimmt dein Problemchen lösen.

Ansonsten kannst du auch mal versuchen ob es was bringt, wenn du das PDF-Programm direkt startest.
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', PChar(PfadZumPDFProgramm), PChar('"' + Dokument + '" /weitere /Parameter'), NIL, SW_HIDE);
,
bzw. einfach erstmal in eine Logdatei reinschreiben, ob über die Unit Delphi-Referenz durchsuchenPrinter sich doch ein Drucker im Systemkonto finden läßt.

rollstuhlfahrer 11. Mai 2011 10:24

AW: TService & Windows7: pdf-/txt-Datei drucken
 
Zitat:

Zitat von himitsu (Beitrag 1100086)
@rollstuhlfahrer: Das versucht er ja ... Also, er versucht über printto das Standardprogramm für PDFs zu starten und dieses soll dann drucken. :zwinker:
Ich vermute einfach mal, daß eventuell sogar der Druckertreiber vorhanden ist, aber im Systemkonto sind andere Registry-Pfade verlinkt
und da werden wohl einfach keine Verlinkungen für *.PDF eingetragen sein.
Sowas läßt sich übrigens rausfinden, indem man mal die Rückgabewerte (Result) von MSDN-Library durchsuchenShellExecute prüft.

Das war etwas anders gemeint. Mit "externes Programm" meinte ich einen Einzeiler:

Delphi-Quellcode:
programm TestApp;
uses
  Windows, ShellAPI;
begin
  if ParamCount <> 3 then Exit; // Alternativ eine Warnung ausgeben!

  ExitCode := ShellExecute(0, PChar(ParamStr(1)), PChar(ParamStr(2)), PChar(ParamStr(3)), nil, SW_SHOW);
end;
und das dann Aufrufen mit
Code:
TestApp.exe "printto" "Dokument" "printerInfo"
.

Aus dem ExitCode bekommt man immerhin mit, ob ein Fehler vorlag, leider nicht, welcher.


Den Thread, in dem gezeigt wird, wie das geht, um aus einem Dienst ein Programm im Benutzerkontext zu starten ist übrigens der hier (mit Admin-Rechten) (ohne LinkedToken hat der Kind-Prozess keine Admin-Rechte), alternativ kannst du dir das auch selbst bauen (Bauanleitung).

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 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