Witam..
Mam problem, zrobiłem aplikacje serwisową (usługę) która pełni rolę managera wydruków (jak coś jest kompletne, to samo się drukuje na drukarce sieciowej), niestety, coś jest nie tak z wyborem drukarki.
Usługa ta działa nie na serwerze, a na komputerze który pełni funkcje replikacji MySQL (dane do raportów pobierane są z Slave`a), jest też sporadycznie używany do drobnych zadań. Ma on zainstalowane dwie drukarki, lokalna i sieciową. Niestey, nie moge mieć pewności, że nikt nie zmieni drukarki domyślnej, a w zasadzie jestem przekonany że będzie przestawiana..
Tak więc przed drukowaniem wykonuje poniższy fragment kodu:
for i := 0 to printer.Printers.Count -1 do
begin
if printer.Printers[i] = '\\SERWER\Lexmark Optra W810' then
begin
WynikA4.PrinterSettings.PrinterIndex := i;
WynikA5.PrinterSettings.PrinterIndex := i;
end;
end;
WynikA4 i WynikA5 to nic innego jak TQuickRep.
Problem polega na tym, ze jakby nie ustawić domyślnej drukarki, to nic z tego nie wychodzi - drukuje na lokalnej :(
W przypływie rozpaczy wstawiłem taką linijkę do kodu:
ShowMessage(inttostr(i) + ' : ' + printer.Printers[i]);
i okazuje się że Optry wcale nie ma na liście drukarek!!!
Żeby było ciekawiej, ten sam kod w zwykłej aplikacji pokazuje wszystkie zainstalowane drukarki, a także ustawia drukarkę dla raportu...
Nie ma różnicy przy zalogowanym użytkowniku na komputerze z usługą i bez zalogowanego usera...
Macie jakieś pomysły co z tym fantem zrobić?
Zrezygnowanie z usługi na rzecz aplikacji umieszczanej w trayu traktuje jako ostateczność - założenie jest takie, żeby nikt tego "przypadkiem" nie zatrzymał, a sam komputer zawsze pracuje i już wszytkich do tego przyzwyczaiłem.