2012-02-28 13 views
8

Mam usługę systemu Windows, która musi uruchomić proces wysyłania pliku do drukarki (znalazłem tam rozwiązanie https://stackoverflow.com/a/4875755/1228738). Robię to za pomocą metody Process.Start(). Moim problemem jest to, że nic się nie dzieje.Drukowanie przez wykonanie procesu w usłudze systemu Windows

Usługa jest faktycznie zainstalowana na moim komputerze programisty (win7, x64). Próbowałem zainstalować go jako LOCAL SYSTEM, NETWORK SERVICE, LOCAL SERVICE z tym samym wynikiem za każdym razem.

Próbowałem te drogę zaczynając mój proces:

Process p = new Process(); 
p.StartInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe"; 
p.StartInfo.Arguments = "-p myFile.pdf"; 
p.Start(); 

i

Process.Start("C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe", "-p myFile.pdf"); 

a także

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe"; 
startInfo.Arguments = "-p myFile.pdf"; 

Process.Start(startInfo); 

Kiedy I wykonanie tego samego kodu w aplikacji winform, wszystko działa W porządku, plik jest wysyłany do drukarki. Ale w usłudze Windows nic się nie dzieje.

Widziałem ten post https://stackoverflow.com/a/6271309/1228738, co wyjaśnia, dlaczego nie widzę interfejsu użytkownika, to dobrze, nie mam żadnego interfejsu użytkownika. Ale jak wspomniano w sekcji komentarzy, proces bez wkładu użytkownika powinien być w porządku. Rozpoczęty proces nie wymaga wprowadzania danych przez użytkownika.

Jedyne, co mogę teraz powiedzieć, to to, że z powodu izolacji sesji (https://stackoverflow.com/a/5063750/1228738), usługa nie może znaleźć żadnych zainstalowanych drukarek ... Czy tak jest w tym przypadku? Jeśli tak, to jakąkolwiek sugestię, jak to obejść? A jeśli nie, masz pojęcie, co jest nie tak?

Dzięki!

EDIT # 1

próbowałem uruchomiona usługa z kontem użytkownika, a to działa, więc myślę, że moje obawy są potwierdzone ... użytkownicy lokalnego systemu i usług sieciowych nie ma zainstalowanych drukarek.

Więc dopracuję moje pytanie. Czy istnieje sposób, aby te konta miały dostęp do drukarek zainstalowanych na komputerze?

EDIT # 2

W końcu zdecydował, że użytkownik będzie tworzone za prowadzenie tej usługi oraz tym, że konta użytkowników będziemy zainstalować drukarkę, na której można wydrukować.

Domyślam się, że to pytanie może być teraz zamknięte. Dziękuję wszystkim za pomoc.

+0

Może to być spowodowane tym, że aplikacja próbuje wyświetlić okno dialogowe drukowania, ale sesja jest nieinteraktywna (sprawdź dziennik zdarzeń aplikacji) lub może być, jak sugerujesz, ponieważ użytkownik, z którego usługa działa, nie ma żadnych drukarek skonfigurowany. Możesz zalogować się jako użytkownik, dla którego usługa działa (jeśli to możliwe) i skonfigurować drukarki. –

+0

Kiedy robię dokładnie ten sam kod w aplikacji WinForm, plik jest wysyłany do drukarki bez okna dialogowego drukowania, więc oczekiwałbym takiego samego zachowania z usługi. Spróbuję czegoś podobnego do tego, co sugerujesz, i uruchom usługę przy użyciu mojego konta użytkownika i sprawdź, czy działa w ten sposób. Dzięki – Fid

+0

również, gdzie znajduje się myFile.pdf? Czy usługa ma dostęp do tej ścieżki? – roymustang86

Odpowiedz

0

sprawdź na tej stronie MSDN: http://support.microsoft.com/kb/324565

Według tej strony, nie można wydrukować ze strony ASP.NET lub usługi Windows przy użyciu .NET.

+2

Dzięki za link, ale nie sądzę, że dotyczy mojej sytuacji. Nie używam klas drukowania .NET Framework do drukowania. Właśnie zaczynam plik .exe, który przyjmuje argument mówiący mu o wydrukowaniu dokumentu. – Fid

0

Rozwiązaniem jest tu tho udostępnić drukarkę lokalną i nazywają Foxit z

-/t yourfile.pdf \\localhost\YourSharedPrinter

ten sposób usługa nie potrzebuje UserProfile ani drukarki domyślnej.

3

miałem ten problem też, ten trik rozwiązać go

Przejść do usług ---> kliknij dwukrotnie żądaną usługę ---> przystąpić do logowania Tab

dostarczać danych logowania, z którego drukarka została zainstalowana.

Uruchom usługę, a następnie sprawdź kolejkę drukarki.

Powód: Lokalne konto systemowe nie ma zainstalowanej drukarki!

Zobacz zrzut ekranu poniżej. enter image description here

Powiązane problemy