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.