Hi,
ich schreibe gerade einen Dienst für Windows und will eine Datei drucken.
Wenn ich versuche, den Dienst unter dem "lokalen Systemkonto" zu starten (auch mit Datenaustausch aktiviert) und drucke, kommt die Meldung, dass kein Standarddrucker definiert sei.
Wenn ich meinen Benutzeraccount angebe, funktioniert es mit Textdokumenten, bei denen notepad.exe /p <file> gestartet wird. Microsoft Word zB bekommt aber via
DDE seine Parameter, hier funktioniert mein Code nicht (eine eigene
DDE-Implementation läuft auch nicht als Service, dazu habe ich hier schon mal was gepostet) - WINWORD.exe wird zwar gestartet, allerdings wird weder das temporäre File angelegt im selben Ordner (ein Zeichen dafür, dass Word das Dokument geöffnet hat) noch etwas gedruckt - wenn ich manuell auf die Datei gehe und per Rechtsklick "Drucken" wähle, geht alles problemlos. Es ist, wohlgemerkt, der selbe Account.
Hat einer eine Idee?
Hier ist mein Code zum starten:
Delphi-Quellcode:
ZeroMemory(@sei, sizeof(sei));
with sei
do begin
cbSize:=sizeof(sei);
// we want a process handle and have no GUI available
fMask:=SEE_MASK_NOCLOSEPROCESS
or SEE_MASK_FLAG_NO_UI;
Wnd:=0;
lpVerb:='
print';
lpFile:=FileName;
lpParameters:=nil;
lpDirectory:=nil;
nShow:=SW_HIDE;
end;
ShellExecuteExA(@sei);
// Errorbehandlung hab ich natürlich drin, ist aber zu lang/uninteressant
Ich habe schon von CreateProcessAsUser gelesen, allerdings kann man hier kein Verb "print" angeben, gibt's da eine andere Möglichkeit, Windows eine Datei drucken zu lassen?!
Danke!