AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TService & Windows7: pdf-/txt-Datei drucken
Thema durchsuchen
Ansicht
Themen-Optionen

TService & Windows7: pdf-/txt-Datei drucken

Offene Frage von "rollstuhlfahrer"
Ein Thema von HolgerMaune · begonnen am 10. Mai 2011 · letzter Beitrag vom 11. Mai 2011
Antwort Antwort
HolgerMaune

Registriert seit: 1. Mai 2005
1 Beiträge
 
#1

TService & Windows7: pdf-/txt-Datei drucken

  Alt 10. Mai 2011, 22:08
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
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

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

  Alt 10. Mai 2011, 22:42
Hallo und herzlich Willkommen in der DP

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

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 10. Mai 2011, 22:55
@rollstuhlfahrer: Das versucht er ja ... Also, er versucht über printto das Standardprogramm für PDFs zu starten und dieses soll dann drucken.
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.
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Mai 2011 um 23:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

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

  Alt 11. Mai 2011, 11:24
@rollstuhlfahrer: Das versucht er ja ... Also, er versucht über printto das Standardprogramm für PDFs zu starten und dieses soll dann drucken.
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
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 17:12 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